如何在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''
(我也用_替换空格)
有没有我没试过的?
答案 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