SQL Server查询的行为与JDBC相比具有不同的行为 - 省略了一些表

时间:2011-05-23 07:54:52

标签: sql-server jdbc

我一直在尝试使用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()不会受此影响) 感谢。

1 个答案:

答案 0 :(得分:1)

我没有看到您在何处设置数据库上下文,但我怀疑这是问题所在。作为测试,您可以将语句更改为“select db_name()”并查看它返回的内容。如果您认为自己不在数据库中,那就是您的问题。