0

嗨,我正在动态地将一般评论插入到我的数据库中。我的查询如下所示:

String sql = "insert into table (comment) values('"+ dynamic_comment + "');";

当使用插入如下内容时出现错误:

我很好

因为当时我的查询变成:

insert into table (comment) values('I'm doing great');

'我很好'

Error: Caused by: android.database.sqlite.SQLiteException: near "t": 
syntax error (code 1): , while compiling: 
insert into timeline(comment) values('Can't belive it really works');

有人能告诉我如何克服这个问题,以及在使用数据库时我会面临多少其他类似的问题。

谢谢

4

2 回答 2

2

您需要使用准备好的语句,很长一段时间以来,将原始字符串连接到查询中一直是不好的做法。

这里

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("insert into table (comment) values(?)");
stmt.bindString(1, dynamic_comment);
stmt.execute();
于 2013-03-19T09:42:59.520 回答
1

您需要在插入之前转义字符串变量。

String sql = "insert into table (comment) values('"+ DatabaseUtils.sqlEscapeString(dynamic_comment) + "');";

上述方法容易受到 SQL 注入攻击。为了更安全,请了解有关使用参数语句的更多信息。

与您的查询相同的示例将是:

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("INSERT INTO `table` (`comment`) values(?)");
stmt.bindString( 1, dynamic_comment );
stmt.execute();
于 2013-03-19T09:41:42.433 回答