PreparedStatement用于选择计数

时间:2015-01-23 02:32:05

标签: java sql oracle prepared-statement

我有一个程序可以计算来自各种数据源的记录数。我将数据库名称和表名分别存储在名为database_namestable_names的数组列表中。我无法让它运行:

for (int i = 0; i < table_names.size(); i++) {
    String query = "select count(1) from ?.?";
    PreparedStatement stmt = connection.prepareStatement(query);
    stmt.setString(1, database_names.get(i));
    stmt.setString(2, table_names.get(i));
    ResultSet rs = stmt.executeQuery();
}

我收到ORA-00903: invalid table name错误。我设置了打印语句,以确保我的database_names.get(i)table_names.get(i)打印出正确的值。他们是,如果我将数据库名称和表名硬编码到我的query字符串中,程序就可以计算记录。

如何正确准备我的查询语句,使其形式为:

select count(1) from database_name.table_name

1 个答案:

答案 0 :(得分:0)

Oracle说:当您准备包含要在运行时提供的输入数据的SQL语句或PL / SQL块时,SQL语句或PL / SQL块中的占位符标记必须提供数据的位置。

架构和表名不是数据,而是数据结构。在准备阶段,Oracle解析语句,检查权限。优化计划。没有架构和表名,这是不可能的。 在准备语句时,Oracle在执行阶段使用绑定变量。

在您的情况下,您必须为每个表

创建新的PreparedStatement