Android sqlite表名'字符

时间:2012-03-20 16:40:27

标签: android sqlite

如何在sqlite表名中添加'标记?

用户创建表格,我想添加在表格名称中使用'标记的功能。

e.g Dad's stuff

那么其他特殊字符如(_ - / , .)

呢?

我试过

String newlist_listname = et_NewGroceryList.getText().toString();
unrecognized token: "'s_stuff

newlist_listname.replaceAll("'", "\'");
unrecognized token: "'s_stuff

newlist_listname.replaceAll("'", "\\'");
unrecognized token: "'s_stuff 

newlist_listname.replaceAll("'", "''");
syntax error: CREATE TABLE GL_Mom''s_stuff

newlist_listname = "'" + newlist_listname.replaceAll("'", "''") + "'";
syntax error: CREATE TABLE GL_'Mom''s_stuff'

newlist_listname = "'" + newlist_listname + "'";
syntax error: CREATE TABLE GL_'Mom's_stuff'

newlist_listname = "'" + newlist_listname.replaceAll("'", "\'") + "'";
syntax error: CREATE TABLE GL_'Mom's_stuff'

newlist_listname = "'" + newlist_listname.replaceAll("'", "\\'") + "'";
syntax error: CREATE TABLE GL_'Mom's_stuff'

newlist_listname = "'" + newlist_listname.replaceAll("'", "''") + "'";
syntax error: CREATE TABLE GL_'Mom''s_stuff'

newlist_listname = "\'" + newlist_listname.replaceAll("'", "\'") + "\'";
 syntax error: CREATE TABLE GL_'Mom's_stuff'

newlist_listname = "\\'" + newlist_listname.replaceAll("'", "\'") + "\\'";
unrecognized token: "\": CREATE TABLE GL_\'Mom's_stuff\'

newlist_listname = "''" + newlist_listname.replaceAll("'", "\'") + "''";
syntax error: CREATE TABLE GL_''Mom's_stuff''

(我也用_替换空格)

有没有我没试过的?

2 个答案:

答案 0 :(得分:1)

我假设这是用于某种列表制作应用程序的?

不要为每个列表创建一个表。这是糟糕的数据库设计。为所有列表条目创建一个表,并使用该表中的列来指示它们属于哪个列表 - 如下所示:

+-----------+----------+--------------+
| list      | position | item         |
+-----------+----------+--------------+
| Groceries | 1        | eggs         |
| Groceries | 2        | butter       |
| Groceries | 3        | milk         |
| Hitlist   | 1        | Guido        |
| Hitlist   | 2        | Franco       |
...

使用list上的索引,这与每个列表中的表格一样快 - 可能更快。“

答案 1 :(得分:0)

如果要在值中使用实际单引号,则必须使用其他引号将其转义,因此在将Dad's Stuff插入SQLite之前,需要将Dad''s Stuff修改为whereArgs查询。在数据值中,当您使用insert()update()query()delete()方法向String.replace("'","''")数组提供数据时,Android会为您执行此操作,但对于表名,你需要自己逃避。

'Dad''s Stuff'这样的东西应该可以解决问题。对于表名不确定,您可能需要预先包装您在单引号中传递的名称,即'(The_St/atement)'

单引号(即撇号)实际上是唯一的特殊情况,因为它是用于转义SQL语句中所有其他字符的字符。换句话说,我可以安全地在{{1}}之类的SQL语句中传递一个字符串,因为整个内容都是单引号。

HTH