2012-08-12 104 views
0

我試圖在記錄存在時更新值,否則將值插入數據庫。但是,這不起作用。我寫了下面的代碼。如果存在ID,則更新記錄else插入值

String sqlCheck = "Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = '"+empId+"' "; 
    PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck); 
    prpStatementCheck.setString(1, EMP_EMPLOYEE_ID); 
    ResultSet rsCheck=prpStatementCheck.executeQuery(); 
    String check=null; 

    while((rsCheck.next()) 
    { 
     if(rsCheck.next()>0) 
      update statement; 
     else 
      Insert Statement; 
    } 
+0

調試時出現什麼錯誤?它發生在哪一行? – Zakaria 2012-08-12 19:05:38

+0

你可以嘗試沒有[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)? – 2012-08-12 19:55:51

回答

0

作爲EMP_EMPLOYEE_ID字段是整數類型,使用setInt而非setString

String sqlCheck = "Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = ?"; 
PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck); 
prpStatementCheck.setInt(1, EMP_EMPLOYEE_ID); 
+0

Reimeus,EMP_EMPLOYEE_ID在DB中是整數。 – Nash 2012-08-12 20:22:54

+0

啊哈,請看我的更新 – Reimeus 2012-08-12 20:25:24

1

了setString應該綁定變量使用: 您的SQL字符串應該是這樣的:

"Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = ?" 

什麼是你的SqlServer版本? 如果是2008或更高版本,則可以使用UPSERT命令。

+0

是的,我正在使用2008 – Nash 2012-08-12 19:16:24

1

即條件而((rsCheck.next()),如果僱員存在將僅被執行 否則,該代碼

if(rsCheck.next()>0) 
     update statement; 
    else 
     Insert Statement; 

不可達 你可以使用類似的東西:

boolean exists = false; 

while((rsCheck.next()) 
{ 
    update statement; 
    exists = true; 
} 
if(!exists) insert statement; 
+0

如果id是關鍵字,你可以只是if(rs.next())update else insert – andy 2012-08-13 06:19:54

相關問題