2013-06-19 51 views
0

我在我的java代碼中運行一個簡單的更新語句到一個oracle數據庫(JDBC調用),它會更新記錄時發現,但何時記錄不存在我得到「java.sql.SQLException:ORA-01002:抓取序列」異常。這是我的代碼,爲什麼是異常?我應該在哪裏改進它。代碼示例會非常有幫助。爲什麼我越來越java.sql.SQLException:ORA-01002:抓取序列異常

public String preformUpdate(String someValue){ 
    ResultSet rs; 
    String result = "Update failed record not found."; 
    StringBuffer sb = new StringBuffer(); 

    try{ 
     conn = DBConnect.getInstance().dbOracleConnect(); 

     StringBuffer sbUpdate = new StringBuffer(); 
     sbUpdate = new StringBuffer("UPDATE sometable "); 
     sbUpdate.append("SET value1 = ? "); 
     sbUpdate.append("WHERE value2 = ?"); 

     ps = conn.prepareStatement(sbUpdate.toString()); 
     ps.setString(1, "0"); 
     ps.setString(2, someValue); 

     rs = ps.executeQuery(); 

     if (rs.next()){ 
      result = "Value updated";    
     } 

    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
    finally{ 
     JDBCHelper.close(cs); 
     JDBCHelper.close(conn);   
    } 

    return result; 
} 
+0

我不是一個Java開發人員,但從我所瞭解的其他語言中,我認爲rs.next()可能是問題,因爲更新查詢可能沒有返回任何結果集,所以next()失敗。 .. –

+0

你曾經在Java中編寫過SQL插入嗎? –

+0

我只是在學習,對不起,如果這是一個愚蠢的問題。 – JS11

回答

6

您應該使用executeUpdate()而不是executeQuery()因爲你不是發射了SELECT。

int numberOfRowsAffected = ps.executeUpdate(); 

此方法返回數據庫中實際更新的行數。

+0

Ravi Thapliyal處理這個異常,但是當它發現要更新的記錄只是掛在那行上int numberOfRowsAffected = ps.executeUpdate();我正在更新一個記錄。 – JS11

+0

在程序中掛起不會終止?它是否在控制檯上拋出任何異常?你能否更新你的代碼塊以增加清晰度?另外,數據庫中value1/2 varchar的數據類型是什麼? –

+0

它只是掛起沒有例外,程序不會終止 – JS11

相關問題