我一直在尝试使用JDBC上的SQL查询检索所有表的约束数据。
我的测试数据库只有3个表。
如果我使用MS SQL Server Management Studio以交互方式执行查询,我会得到我期望的所有结果(即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()不会受此影响) 感谢。
答案 0 :(得分:1)
我没有看到您在何处设置数据库上下文,但我怀疑这是问题所在。作为测试,您可以将语句更改为“select db_name()”并查看它返回的内容。如果您认为自己不在数据库中,那就是您的问题。