执行下一个java代码时出现意外错误
String sql = "INSERT INTO fake_advert (content) VALUES ('" + content + "');";
System.out.println("sql:"+sql);
stmt.executeUpdate(sql);
输出
sql:INSERT INTO fake_advert (content) VALUES ('Winni's');
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "s": syntax error)
如何在插入值时防止此类错误?
答案 0 :(得分:0)
字符串"Winni's"
中的单引号打破了查询。一个简单的解决方案是转义内容字符串中的特殊字符。
String modifiedContent = content.replace("'", "''");
String sql = "INSERT INTO fake_advert (content) VALUES
('" + modifiedContent + "');";
在SQL中,单引号将使用双引号进行转义。
Prepared statements比直接执行SQL字符串更受欢迎。代码将更改为
String insertStr = "INSERT INTO fake_advert (content) VALUES (?)";
PreparedStatement insertFakeAdvert = con.prepareStatement(insertStr);
然后在您可以像这样执行PreparedStatement对象之前提供值来代替问号占位符(如果有的话)
insertFakeAdvert.setString(1, content);