2017-06-19 967 views
2

我試圖在Oracle 10g數據庫表中插入值。我想爲列插入值,名字並且值有兩個像這樣的單引號: O'Rielly's Edition在JDBC PreparedStatement參數中轉義兩個單引號

我正在使用JDBC的準備語句傳遞參數值名字。它用單引號(O'Rielly)正常工作。

但是,當我使用兩個單引號它給SQL錯誤ORA-00907: missing right parenthesis。有關如何處理PreparedStatement中的兩個單引號的任何建議? 我的查詢如下:

StringBuffer strUpdateUserQuery = new StringBuffer("UPDATE USERS set FNAME = ? , LNAME = ?, USER_TIMEZONE = ?, CREATED_DATE = CURRENT_DATE, ACTIVE_STATUS = ?, APPROVAL_STATUS = ?,USER_GROUP_ID = ? where USER_ID = ?"); 

pstmt = conn.prepareStatement(strUpdateUserQuery.toString()); 
pstmt.setString(1, userVO.getFirstName()); 
pstmt.setString(2, userVO.getLastName()); 
pstmt.setString(3, userVO.getStrTimeZone()); 
pstmt.setString(4, userVO.getStatus()); 
pstmt.setString(5, userVO.getStrAppStatus()); 
pstmt.setInt(6, Integer.parseInt(userVO.getUserGroupId())); 
pstmt.setString(7, userVO.getUserId()); 

int iCount = pstmt.executeUpdate(strUpdateUserQuery.toString()); 

而且我得到的錯誤是如下:

ORA-00907:缺少右括號\ n

有了上面的代碼,我我正在解決這個問題。

+0

顯示你正在嘗試使用preparedStatement時插入什麼的例子。 – user75ponic

+3

您不需要在綁定值中轉義單引號。請編輯您的問題以顯示您正在使用的實際準備好的陳述。 (我想,這個價值正如它的約束)。什麼是你回來的完整錯誤? –

+3

PreparedStatement的重要優點之一是您無需擔心轉義。這聽起來好像你沒有正確使用PreparedStatement。 ** [編輯] **您的問題,並添加您使用的代碼。做**不**在評論中發佈代碼。 –

回答

1

嘗試改變

int iCount = pstmt.executeUpdate(strUpdateUserQuery.toString()); 

int iCount = pstmt.executeUpdate(); 
+0

我收到與上述解決方案相同的錯誤。 –