如果是针对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
的表名或者字段名里面搞非法字符。
如果是接手的项目,里面存在这种问题,可以采用这种解决方案。