2013-01-20 137 views
1

林與Java EE和德比的工作,我嘗試從我的ResultSet中獲取數據,並把它們放在int和字符串,但不工作,它給了我這個錯誤:結果集錯誤

值java.sql.SQLException:無效操作當前光標位置。

我tryed result.next(),但什麼都沒有,這裏是我的代碼:

Connection conn = null; 
    Statement stmt = null; 
    ResultSet result = null; 

    Hotel hot = new Hotel(); 
    try { 
     synchronized (dataSource) { 
      conn = dataSource.getConnection(); 
     } 



     stmt = conn.createStatement(); 
     String req = "SELECT * FROM hotel WHERE num = " + num; 
     result = stmt.executeQuery(req);                

     } 

     //result.next();   

     int xxnum = result.getInt(1); 
     String nom = result.getString("nom"); 
     String villeV = result.getString("ville"); 
     int etoilesV = result.getInt("etoiles"); 
     String directeur = result.getString("directeur"); 

     Hotel hol = new Hotel(num, nom, villeV, etoilesV, directeur);     

     result.close(); 
     stmt.close(); 
     return hol; 
    } catch (SQLException ex) { 
     throw new DAOException("probl�me r�cup�ration de la liste des hotels !!", ex); 
    } finally { 
     closeConnection(conn); 
    } 

回答

2

您需要使用的ResultSet的next()方法。

檢查Javadocs here我已經剪下了下面的相關部分。

將光標從當前位置移動一行。一個ResultSet 光標最初位於第一行之前;下一個方法的第一個調用使第一行成爲當前行;第二次調用使第二行成爲當前行,依此類推。

所以,你需要做到這一點在你的代碼:

if(result.next()) 
{ 
    int xxnum = result.getInt(1); 
    String nom = result.getString("nom"); 
    String villeV = result.getString("ville"); 
    int etoilesV = result.getInt("etoiles"); 
    String directeur = result.getString("directeur"); 
} 
4

錯誤

java.sql.SQLException: Invalid operation for the current cursor location. 

將使用過光標設定到下一個位置引起

result.next(); 

撥打電話if聲明

if (result.next()) { 
    // build Hotel object 
    ... 
} 

如果仍然沒有看到任何結果,請直接對您的數據庫運行SQL並查看是否有任何記錄被返回。如果沒有,請相應地調整您的查詢或數據。


旁註:

  • 使用PreparedStatement防止SQL Injection攻擊。
  • 地址result.close();stmt.close();呼叫finally塊。