符号'出现意外错误

时间:2017-05-15 17:23:42

标签: java sqlite

执行下一个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)

如何在插入值时防止此类错误?

1 个答案:

答案 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);