您好我正在动态地将一般注释插入我的数据库。我的查询如下:
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');
有人能告诉我如何克服这个问题以及在使用数据库时我可以面对的其他问题。
感谢
答案 0 :(得分:2)
您需要使用预准备语句,将原始字符串连接到查询中已经很长时间了。
来自here:
SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("insert into table (comment) values(?)");
stmt.bindString(1, dynamic_comment);
stmt.execute();
答案 1 :(得分:1)
您需要在插入之前转义字符串变量。
String sql = "insert into table (comment) values('"+ DatabaseUtils.sqlEscapeString(dynamic_comment) + "');";
上述方法容易发生SQL注入攻击。为了更加安全,请详细了解如何使用parametric statements。
与您的查询相同的查询示例:
SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("INSERT INTO `table` (`comment`) values(?)");
stmt.bindString( 1, dynamic_comment );
stmt.execute();