Создается только первая таблица в операторе создания таблицы - PullRequest
4 голосов
/ 28 мая 2010

Таблица «учетные данные» действительно отображается в оболочке adb. Я проверил logcat, и он, похоже, не сообщает о проблеме ...

   private static final String DATABASE_CREATE =
        "create table credentials (_id integer primary key autoincrement, "
                + "username text not null, password text not null, "
                + "lastupdate text);"
      + "create table user (_id integer primary key autoincrement, "
                + "firstname text not null, "
                + "lastname text not null);"
      + "create table phone (_phoneid integer primary key autoincrement, "
                + "userid integer not null, phonetype text not null, "
                + "phonenumber text not null);"
      + "create table email (_emailid integer primary key autoincrement, "
                + "userid integer not null, emailtype text not null, "
                + "emailaddress text not null);"
      + "create table address (_addressid integer primary key autoincrement,"
                + "userid integer not null, addresstype text not null, "
                + "address text not null);"
      + "create table instantmessaging (_imid integer primary key autoincrement, "
                + "userid integer not null, imtype text not null, "
                + "imaccount text not null);";

Я обдумываю это и держу пари, что это глупая синтаксическая опечатка! Или, по крайней мере, я надеюсь, что это что-то тривиальное; -)

Ответы [ 3 ]

11 голосов
/ 28 мая 2010

Полагаю, вы используете:

yourDB.execSQL("your statement");

Если это так, в документации Google упоминается это:

Выполнить одну инструкцию SQL, которая не запрос. Например, СОЗДАТЬ TABLE, DELETE, INSERT и т. Д. Несколько операторы, разделенные; s не являются поддерживается. требуется блокировка записи

Таким образом, вы должны фрагментировать каждую инструкцию создания таблицы и повторить запрос для каждой таблицы.

5 голосов
/ 28 мая 2010

Если я правильно помню, я столкнулся с подобной проблемой и обнаружил, что только один оператор выполняется за вызов execSQL() или подобных методов. Любые дополнительные утверждения молча игнорируются.

Попробуйте разделить каждый оператор на отдельные строки и выполнять их отдельно, а не на одну строку и один вызов.

Например:

private static final String TABLE_1 =
    "create table credentials (_id integer primary key autoincrement, "
    + "username text not null, password text not null, "
    + "lastupdate text);";

private static final String TABLE_2 =
    "create table user (_id integer primary key autoincrement, "
    + "firstname text not null, "
    + "lastname text not null);";

private static final String TABLE_3 =
    "create table phone (_phoneid integer primary key autoincrement, "
    + "userid integer not null, phonetype text not null, "
    + "phonenumber text not null);";

private static final String TABLE_4 =
    "create table email (_emailid integer primary key autoincrement, "
    + "userid integer not null, emailtype text not null, "
    + "emailaddress text not null);";

private static final String TABLE_5 =
    "create table address (_addressid integer primary key autoincrement,"
    + "userid integer not null, addresstype text not null, "
    + "address text not null);";

private static final String TABLE_6 = 
    "create table instantmessaging (_imid integer primary key autoincrement, "
    + "userid integer not null, imtype text not null, "
    + "imaccount text not null);";

public void createTables(){
    db.execSQL(TABLE_1);
    db.execSQL(TABLE_2);
    db.execSQL(TABLE_3);
    db.execSQL(TABLE_4);
    db.execSQL(TABLE_5);
}
 db.execSQL(TABLE_6);
0 голосов
/ 28 мая 2010

положить Перейти после каждого оператора Create Table

Обновлен скрипт

private static final String DATABASE_CREATE =
        "create table credentials (_id integer primary key autoincrement, "
                + "username text not null, password text not null, "
                + "lastupdate text); Go;"
      + "create table user (_id integer primary key autoincrement, "
                + "firstname text not null, "
                + "lastname text not null); Go;"
      + "create table phone (_phoneid integer primary key autoincrement, "
                + "userid integer not null, phonetype text not null, "
                + "phonenumber text not null); Go;"
      + "create table email (_emailid integer primary key autoincrement, "
                + "userid integer not null, emailtype text not null, "
                + "emailaddress text not null) Go;;"
      + "create table address (_addressid integer primary key autoincrement,"
                + "userid integer not null, addresstype text not null, "
                + "address text not null); Go;"
      + "create table instantmessaging (_imid integer primary key autoincrement, "
                + "userid integer not null, imtype text not null, "
                + "imaccount text not null); Go;";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...