2016-04-18 8 views
0

私はSQL Server JDBCドライバに問題があります。私はMicrosoft JDBCドライバとJTDSドライバを試しましたが、両方とも同じ問題があります。ResultSetで "table.field"を検索すると "invalid列名 "ですが、"フィールド "だけを検索すると機能します。 これは私にとって問題です。なぜなら、自動的にクエリを生成し、 "table.field"という表記を使用するアプリケーションを持っているからです。今はMySQLとPostgreSQLで作業していますが、うまくいきましたが、今はSQL Serverサポート私はこの問題を発見しました。 ドライバの設定が間違っていたり、このようにしか動作しないという問題がありますか? 他のドライバがありますか?SQL Server JDBCでtable.field表記?

私は仕事をすることができない場合もあります。たとえば、同じ名前のフィールドを持つ2つのテーブルを作成し、それらの間にデカルト積を作りました。私は、クエリにSQL Server上

SELECT * FROM t1,t2 

を実行すると、結果が

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

なります

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

テーブルT1、T2は同じであり、彼らはこのような構造を持っていますが、 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 
} 
+0

このクエリの結果はどうなりますか?あなたはデカルト積を得る。このことをしていますか? – Jens

+0

これをクエリレベルで処理し、t1とt2に別名を割り当てる必要があります。 – jmcg

+2

私はこれがあなたが探していると思うhttp://stackoverflow.com/questions/7224024/jdbc-resultset-get-columns-with-table-alias – Amal

答えて

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")); 

} 
関連する問題