Android sqlite имя таблицы 'персонаж - PullRequest
1 голос
/ 20 марта 2012

Как можно добавить метку ' в имя таблицы 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 ]

1 голос
/ 21 марта 2012

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

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

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

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

0 голосов
/ 20 марта 2012

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

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

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

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...