SQL Server 查询的交互行为与 JDBC 不同 - 省略了一些表
我一直在尝试使用基于 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() 不会遇到这种情况) 谢谢。
I've been trying to retrieve constraint data for all tables using an SQL query over JDBC.
My test database has only 3 tables.
If I execute the query interactively using MS SQL Server Management Studio, I get all the results that I expect (ie. 3 rows - there's a primary key in each of 3 tables).
if I use the JDBC method to specifically retrieve primary keys (as below) then I also correctly get 3 results:
ResultSet rs = dbmd.getPrimaryKeys(jdbcCatalog, jdbcSchema, jdbcTableName);
If I use the exact same SQL statement (that I used interactively and got 3 results back) as a query over JDBC (using executeQuery() shown below) then I only get 1 result instead of the expected 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.
}
I would be very grateful if someone could explain why the SQL query over JDBC is performing differently to the exact same SQL query performed interactively. Could it be a security/ownership issue? (although the JDBC call getPrimaryKeys() doesn't suffer this)
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不知道你在哪里设置数据库上下文,但我怀疑这就是问题所在。作为测试,您可以将语句更改为“select db_name()”并查看它返回的内容。如果这不是您认为应该使用的数据库,那就是您的问题。
I don't see where you're setting your database context, but I suspect that that's the issue. As a test, you can change your statement to "select db_name()" and see what it returns. If it's not the database that you think that you should be in, that's your issue.