2011-12-23 38 views
0

我在類路徑中運行了sqljdbc4.jar的以下程序。 EMPLOYEE表中存在員工姓名DEMO的數據,但以下程序不會檢索DEMO的數據。當相同的程序在類路徑中與Merlia.jar一起運行時,它正在爲DEMO檢索數據。準備好的聲明中的綁定不能與Microsoft SQL Server JDBC驅動程序一起工作sqljdbc4.jar

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
Connection con = DriverManager.getConnection("jdbc:sqlserver://SERVER23:5000;databaseName=TESTDB", "SYSADM", "SYSADM"); 

String sqlSele = "SELECT * FROM EMPLOYEE WHERE EMPNAME like ?" ; 
PreparedStatement sts = con.prepareStatement(sqlSele); 
sts.setString(1, "DEMO");  
ResultSet rs = sts.executeQuery(); 
while(rs.next()) 
{ 
System.out.println("driverConn.main()" + rs.toString()); 
} 

} 
catch(Exception e) 
     { 
System.out.println(e); 
e.printStackTrace(); 
     } 

修改SQL語句爲「SELECT * FROM EMPLOYEE WHERE EMPNAME像 'DEMO'」(沒有了setString方法用在這裏),再執行該程序,這時候我得到的結果。

有人可以幫助我從這個問題

回答

0

此外,您可能希望在結果集中,沒有任何toString()會給你訪問一個列:使用rs.getString(1)去的第一個結果集列值(假設是字符串)

提示:不要在查詢中使用星號。使用具體的列名稱更穩定。否則,對數據庫的更改可能會以不同順序返回列,並且代碼會中斷。

+0

當你使用sqljdbc4.jar時,你有沒有遇到過這些類型的問題?同樣的程序與Merlia.jar工作正常。 – 2011-12-23 12:13:42

+0

我在system.out.print語句中使用了rs.getString(1),但即使如此,控制檯上也沒有觀察到輸出。 – 2011-12-24 06:32:35

+0

問題可能與setString()方法有關,因爲當我使用SQL語句作爲「SELECT * FROM EMPLOYEE WHERE EMPNAME like'DEMO'」(不使用setString進行綁定)時,我得到了控制檯上的輸出。 – 2011-12-24 06:51:36

0

'EMPNAME'的列類型是什麼?它是varchar或類似的東西? 使用類似於列類型的setXXX()方法。所以如果字符串或文本類型的列類型IS,然後setString()應該工作。 如果它的類型爲varchar或nvarchar,等你還可以使用

sts.setObject(1, 'DEMO', java.sql.Types.${AppropriateTypeHere}); 

命令。根據您正在編譯的Java版本確認SQLType是否可用。 java.sql.Types.NVARCHAR在Java 1.6之前不可用。 另外,它可能需要您的參數佔位符(?)需要在單引號? IE瀏覽器。

String sql = "SELECT * FROM EMPLOYEE WHERE EMPNAME like '?'" ; 

後者可能不正確。我在使用PreparedStatement獲取估計查詢計劃的鬥爭中遇到了這個問題。所以這可能不適用於你的問題。