SQL Server 查询的交互行为与 JDBC 不同 - 省略了一些表

发布于 2024-11-09 07:01:31 字数 925 浏览 0 评论 0原文

我一直在尝试使用基于 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿忘初心 2024-11-16 07:01:31

我不知道你在哪里设置数据库上下文,但我怀疑这就是问题所在。作为测试,您可以将语句更改为“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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文