2012-11-28 91 views
0

我在java中使用hibernate應用程序來檢索和更新數據庫。單引號Sql更新查詢

在更新表,我形成一個SQL查詢如下,

String qry = "UPDATE " + entity + " SET " + htmlColumn + " ='"+value+"' WHERE " + id + " = " + primaryId; 

其中值是包含單引號有時一個HTML字符串。

如何逃脫忽略/逃脫單引號和更新表成功

感謝

+0

您是說您正在使用hibernate。我認爲你不應該寫這種查詢。 –

回答

1

請勿直接設置值。

currentSession() 
    .createQuery("UPDATE " + entity + " SET " + htmlColumn + 
       " = :value WHERE " + id + " :id") 
    .setParameter("value", value).setParameter(":id",id).executeUpdate(); 
+0

http:// www。 mkyong.com/spring/spring-named-parameters-examples-in-simplejdbctemplate/ – gavenkoa

0

您可以用雙單引號代替單引號。 value.replace("'","''");,但您需要滿足的不僅僅是這些,因爲如果沒有適當地處理SQL注入,您的值可以很容易地進行SQL注入。

3

使用PreparedStatement

String qry = "UPDATE " + entity + 
      " SET " + htmlColumn + " = ? " + 
      "WHERE " + id + " = ?"; 

PreparedStatement pstmt = con.prepareStatement(qry); 
pstmt.setString(1, value); 
pstmt.setInt(2, primaryId); 
pstmt.executeUpdate(); 
+2

是的,這是做這件事的最好方法,我也建議同樣的, +1在我之前發帖:-) –

+0

或者使用'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' – gavenkoa

0

可以利用PreparedStatement爲:

String query= "UPDATE " + entity + " SET " + htmlColumn + " =? WHERE " + id + " = " + primaryId; 

PreparedStatement ptmt = con.prepareStatement(query); 
ptmt.setString(1, value);