2012-03-20 3 views
1

Как можно добавить знак ' в имя таблицы sqlite?Android sqlite table name 'character

Пользователь создает таблицу, и я хочу добавить возможность использовать знак ' в имени таблицы.

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

Возможный дубликат [Можно ли объявить имя таблицы с escape-последовательностями в sqlite3?] (Http://stackoverflow.com/questions/7205345/can-i-declare-table-name-with-escape-sequences-in- sqlite3) –

+0

Оберните его в квадратных скобках. [Dad's stuff] –

+0

Синтаксическая ошибка: CREATE TABLE GL_ [Mom's_stuff] и так далее ... – erdomester

ответ

1

Я предполагаю, что это для какой-то список решений приложения?

Не создавайте таблицу в списке. Это плохой дизайн базы данных. Создайте одну таблицу для всех записей списка, и использовать столбец в этой таблице, чтобы указать, какой список они принадлежат - что-то вроде этого:

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

С индексом на list, это так же быстро - возможно, быстрее - чем наличие таблицы в списке.

+0

да. Когда пользователь создает новый элемент списка, в таблицу добавляется новая запись, а также создается новая таблица с тем же именем. Итак, в главной таблице (списке) есть все теги tablenames – erdomester

+0

Вот что я подумал. Не делай этого. – duskwuff

+0

Я предполагаю, что вы имеете в виду, что я не должен использовать таблицу коллекционеров. В представлении списка я должен показать все таблицы, а это значит, что таблица коллекционеров - это не просто плохой дизайн, но и ненужный, верно? Редактировать: мне кажется, что я могу хранить все записи всех таблиц только в одной таблице и использовать этот индикаторный столбец как «tablenames». Наверное, это то, что вы имеете в виду. – erdomester

0

Если вы хотите использовать фактическую одинарную кавычку в значении, вам нужно избежать ее с помощью другой цитаты, поэтому вам необходимо будет изменить Dad's Stuff как Dad''s Stuff, прежде чем она будет вставлена ​​в запрос SQLite. В значениях данных Android делает это для вас, когда вы отправляете свои данные в массив whereArgs в методах insert(), update(), query() или delete(), но для имени таблицы вам нужно будет сбежать от этого самостоятельно.

Что-то вроде String.replace("'","''") должно сделать трюк. Не уверен в именах таблиц, вам может понадобиться предварительно обернуть имя, которое вы передаете, в одинарных кавычках, например, 'Dad''s Stuff'.

Одиночная кавычка (то есть апостроф) - это действительно единственный случай, потому что это символ, который используется для удаления всех других символов в операторах SQL. Другими словами, я могу безопасно передать строку в SQL-заявлении, например '(The_St/atement)', потому что все это в одинарных кавычках.

НТН