这是我要在其中插入值的表:
" create table if not exists "+CipherCongfigTable +
" ( DATABSE_NAME **TEXT** PRIMARY KEY NOT NULL,DATABSE_KEY **TEXT** NOT NULL);";
当我想插入
String **configDBPassword**= "**x\'2DD29CA89\'**"
通过声明
"insert into "+CipherCongfigTable+ " values("+DataBaseName+","+**configDBPassword**+")"
我正在例外:
无法识别的令牌:“ \”:
我需要使用相同格式的密码,即具有转义字符。有什么办法吗????
谢谢
不要INSERT
在Android(或任何其他数据库包装程序,只要有预定义的API来获取所需的内容)上手动构建(或尽可能避免使用其他任何方法)查询。它使您的应用程序可以引用问题中的一个问题,最糟糕的情况是来自应用程序外部的SQL注入攻击。
例如,configDBPassword = "\"; DROP TABLE <tablename>; --"
只要configDBPassword
用户可以输入,设置“我”就可能会对您的数据库造成严重破坏。
另外,SQLite使用双引号("
),反引号(`
,从MySQL借用)或方括号([]
,从MS SQL借用)来引用标识符(例如,其中包含空格的列或表名),字符串文字通常用单引号('
) 引号。SQLite在允许混合使用两种引用类型方面是相当自由的,但是在适当的地方使用适当的引用样式要可读得多。从文档中:
警告程序员不要使用前面的项目符号中描述的两个例外。我们强调它们仅存在,以便旧的和格式错误的SQL语句将正确运行。未来版本的SQLite可能会引发错误,而不是接受上面的异常所涵盖的格式错误的语句。
事实上,您应该尽可能避免自己报价。要插入值,请改用SQLiteDatabase.insert()
哪种方法将值插入SQLiteDatabase
Android上的正确方法。它还对参数进行了正确的引用:
db.beginTransaction();
try {
final ContentValues values = new ContentValues();
values.put("DATABSE_NAME", DataBaseName);
values.put("DATABSE_KEY", configDBPassword);
db.insert(CipherCongfigTable, null, values);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
始终正确引用您的SQL参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句