如果是针对sqlite3写sql语句的话,一般是这样子:
create table aa(id integer); # ok
这句命令没有任何的问题,可以正常创建。
但是,如果你的表名中有非法字符,就不行了:
create table xx-yy-zz(id integer); # fail
改进:
create table 'xx-yy-zz'(id integer); # ok
对于命令行,就是对这种字段,加引号就可以了。但是对于Java代码:调用SQLiteDatabase.insert(table,nullColumnHack,values)遇到这个问题怎么办?
如果此时
tableName是xx-yy-zz怎么办?
我在项目中看到的解决方案是:
String table = "xx-yy-zz";
long insert = db.insert("[" + tableName + "]", null, contentValues);
这样的确有用。
然后,对于非法字段的解决方式如出一辙。
String table = "x-y-z";
String book = "python-code-book";
String sql = "CREATE TABLE [" + table + "] ([" + book + "] TEXT);";
db.execute(sql);
当然,应该尽量避免在sql的表名或者字段名里面搞非法字符。
如果是接手的项目,里面存在这种问题,可以采用这种解决方案。

本文介绍在SQLite中如何处理包含特殊字符的表名和字段名,包括使用引号包裹及SQLiteDatabase.insert方法的正确调用方式。
3778

被折叠的 条评论
为什么被折叠?



