2012-06-27 65 views
1

我必須使用java查詢MS SQL數據庫。我查詢使用DB下面的代碼我必須使用java查詢MS SQL數據庫

  Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection(
       "jdbc:jtds:sqlserver://XXX.XX.XX>XX:1433/DBNAME", "USERNAME", "Password"); 

     querystr="select DATEDIFF(second,Finish_Time,ReqTime) As FinishDifference from DB.SCHEMA.TABLE where ID='123'"; 
     Statement stmt=conn.createStatement(); 
     ResultSet res=stmt.executeQuery(querystr); 
     System.out.print(res.getRow()); 

當我查詢數據庫使用查詢字符串手動,我能夠成功獲取的結果,但res.getRow()顯示爲0。

回答

1

你忘了,包括next()獲取第一條記錄:

ResultSet res=stmt.executeQuery(querystr); 
if(res.next()) // add this line 
    System.out.print(res.getRow()); 
0

getRow()方法給出當前行的行號。第一行是數字1,第二個數字2,依此類推。

並給出當前行號爲0,如果沒有當前行這是你的情況。

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html#getRow()

+0

OP表示有手動執行的結果 –

+0

@juergend是啊他在MS SQL上手動嘗試查詢。但絕不能在SQL字符串中使用getRow()。查詢很好,數據被提取,但由於在java中使用getRow(),他得到了意想不到的結果。 – user980089

+0

getrow僅用於查找rowcount。查詢不返回結果。我試圖訪問結果集時收到異常「ResultSet中沒有當前行」 – user1472300

0

最初結果集返回當前光標位置。

ResultSet res=stmt.executeQuery(querystr); 
res.getRow();// It will return 0 (Zero) because result set is pointing to begining of the first record 

res對象指向數據庫中表的第0個位置。當您使用的res.next();

幫助遍歷它會移動到下一條記錄,現在如果你調用

res.getRow();// It will return 1 because cursor is moved to 1st record of table. 

試試這個。

while(res.next()) 
{ 
     System.out.println(res.getRow()); 
} 

它將逐個打印所有行號。

+0

謝謝。是的,我忘了添加res.next – user1472300