gpt4 book ai didi

java - SQL Server JDBC 的 table.field 表示法?

转载 作者:行者123 更新时间:2023-12-01 21:38:30 29 4
gpt4 key购买 nike

我的 SQL Server JDBC 驱动程序有问题,我尝试了 Microsoft JDBC 驱动程序和 JTDS 驱动程序,但它们都有相同的问题:在 ResultSet 中,如果我查找“table.field”,则会收到错误“无效的列名”,但如果我查找“字段”,它才有效。这对我来说是一个问题,因为我有一个自动生成查询并使用符号“table.field”的应用程序,现在我已经在 MySQL 和 Postgresql 上工作并且它工作得很好,但现在我需要添加 SQL Server 支持和我发现了这个问题。这是驱动程序配置错误的问题还是它们只能以这种方式工作?还有其他可用的驱动程序吗?

我还发现了一个无法工作的情况,例如我创建了两个具有相同名称字段的表,并在它们之间进行了笛卡尔积。

表 t1、t2 相同,并且具有以下结构

------
| id |
------
| 1 |
------
| 2 |
------

如果我执行查询

SELECT * FROM t1,t2

在 SQL Server 上结果将是

-----------
| id | id |
-----------
| 1 | 1 |
-----------
| 1 | 2 |
-----------
| 2 | 1 |
-----------
| 2 | 2 |
-----------

但是从使用 JDBC 驱动程序的 Java 中我无法获得相同的结果,因为我无法访问 t1.id、t2.id,而只能访问 id 并且它仅返回第一列。

这是示例代码

Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/test", "user", "pass");         
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM t1, t2");
while(rs.next()){
System.out.println(rs.getString("id")); //This works
System.out.println(rs.getString("t1.id"));//This not works
}

最佳答案

不要使用 SELECT *。相反,使用列名。如果出现重复的名称,请使用唯一的列别名。

Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/test", "user", "pass");         
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT t1.id as col1,t2.id as col2 FROM t1, t2");
while(rs.next()){
System.out.println(rs.getString("col1"));

}

关于java - SQL Server JDBC 的 table.field 表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36689301/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com