我有以下代码:
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.
答案 0 :(得分:2)
避免使用连接的参数值字符串来构建请求:
首选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。它们是预先通过的,因此更适合于在循环中执行以及处理包含否则需要特殊处理的字符的内容。