使用SQL Server JDBC的table.field表示法?

时间:2016-04-18 08:48:36

标签: java sql sql-server jdbc jdbc-odbc

我有SQL Server JDBC驱动程序的问题,我尝试过Microsoft JDBC驱动程序以及JTDS驱动程序,但它们都有同样的问题:如果我查找" 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
}

1 个答案:

答案 0 :(得分:3)

不要使用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"));  

}