问题描述
||
我一直在尝试使用基于JDBC的SQL查询来检索所有表的约束数据。
我的测试数据库只有3个表。
如果我使用MS sql Server Management Studio以交互方式执行查询,则会得到所有期望的结果(即3行-3个表中的每个都有一个主键)。
如果我使用JDBC方法专门检索主键(如下所示),那么我也可以正确地得到3个结果:
ResultSet rs = dbmd.getPrimaryKeys(jdbcCatalog,jdbcSchema,jdbcTableName);
如果我使用完全相同的sql语句(以交互方式使用并返回3个结果)作为通过JDBC的查询(使用下面显示的executeQuery()),则我只会得到1个结果,而不是预期的3个。
String query =
\"select PK.CONSTRAINT_NAME,PK.TABLE_SCHEMA,PK.TABLE_NAME \" +
\"from information_schema.TABLE_CONSTRAINTS PK\";
ResultSet rs = null;
try {
Statement stmt = con.createStatement();
rs = stmt.executeQuery(query);
}catch (Exception exception) {
// Exception handler code
}
while (rs.next()){
// Only executes once.
}
如果有人能解释为什么通过JDBC进行的SQL查询与完全相同的以交互方式执行的SQL查询不同,我将不胜感激。可能是安全/所有权问题吗? (尽管JDBC调用getPrimaryKeys()不会遭受这种情况)
谢谢。
解决方法
我看不到您在哪里设置数据库上下文,但是我怀疑这就是问题所在。作为测试,您可以将语句更改为\“ select db_name()\”,然后查看返回的语句。如果不是您认为应该进入的数据库,那就是您的问题。