ExecuteUpdate可能带有单引号

时间:2015-04-08 19:12:24

标签: java sql sql-server

我有以下代码:

sql = update [myTable] set content = '" map.getString() + "' where id = " map.getKey();
stmt.executeUpdate(sql);

这是在一个循环中运行,map.getString()可以返回一个带有单引号或双引号的字符串。我尝试使用map.getString()周围的多个引号来转义它(例如

sql = update [myTable] set content = ''" map.getString() + "'' where id = " map.getKey();

但没有运气。

如何使用map.getString()的文字值更新内容列?

我收到的示例错误是:(有许多类似的错误)

java.sql.SQLException: Incorrect syntax near 's'.

java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ''' not found.

2 个答案:

答案 0 :(得分:2)

避免使用连接的参数值字符串来构建请求:

  • 它不安全(可能是sql注入)
  • 它没有被优化(因为db引擎总是要解析请求,即使总是将相同的字符串发送到db)。
  • 会产生很多错误的转换错误(特殊字符等)

首选PreparedStatement使用绑定参数。

示例:

PreparedStatement stmt = connection.prepareStatement("UPDATE mytable SET content = ? WHERE id = ?");
stmt.setString(1, map.getString());
stmt.setInt(2,map.getKey());
stmt.executeUpdate();

使用绑定参数可以避免遇到转换错误和语法错误

答案 1 :(得分:0)

使用PreparedStatement。见http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html。它们是预先通过的,因此更适合于在循环中执行以及处理包含否则需要特殊处理的字符的内容。