我有一个程序可以计算来自各种数据源的记录数。我将数据库名称和表名分别存储在名为database_names
和table_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
答案 0 :(得分:0)
Oracle说:当您准备包含要在运行时提供的输入数据的SQL语句或PL / SQL块时,SQL语句或PL / SQL块中的占位符标记必须提供数据的位置。
架构和表名不是数据,而是数据结构。在准备阶段,Oracle解析语句,检查权限。优化计划。没有架构和表名,这是不可能的。 在准备语句时,Oracle在执行阶段使用绑定变量。
在您的情况下,您必须为每个表
创建新的PreparedStatement