0

我在 java 中使用休眠应用程序来检索和更新数据库。

在更新表期间,我形成如下的 sql 查询,

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

其中 value 是一个有时包含单引号的 html 字符串。

如何转义忽略/转义单引号并成功更新表格

谢谢

4

4 回答 4

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();
于 2012-11-28T06:16:50.043 回答
1

不要直接设置值。

currentSession()
    .createQuery("UPDATE " + entity  + " SET " + htmlColumn +
              " = :value WHERE " + id + " :id")
    .setParameter("value", value).setParameter(":id",id).executeUpdate();
于 2012-11-28T06:20:02.793 回答
0

您可以将单引号替换为双单引号。value.replace("'","''");但是您需要满足的不仅仅是这些,因为如果没有适当地满足您的价值,您的价值很容易允许 SQL 注入。

于 2012-11-28T06:16:06.627 回答
0

您可以将preparedstatement用作:

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

PreparedStatement ptmt = con.prepareStatement(query);
ptmt.setString(1, value);
于 2012-11-28T06:17:46.127 回答