Только первая таблица в создает создаваемый оператор таблицы

Таблица "учетные данные" действительно обнаруживается в оболочке 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);";

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

5
задан Pranay Rana 10 February 2012 в 05:32
поделиться

3 ответа

поместите Go после каждого оператора 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;";
-3
ответ дан 18 December 2019 в 14:42
поделиться

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

yourDB.execSQL("your statement");

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

Выполнить один оператор SQL, который не вопрос. Например, СОЗДАТЬ ТАБЛИЦА, УДАЛИТЬ, ВСТАВИТЬ и т. Д. Несколько операторы, разделенные; s не являются поддерживается. требуется блокировка записи

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

11
ответ дан 18 December 2019 в 14:42
поделиться

Если я правильно помню, я столкнулся с аналогичной проблемой и обнаружил, что только 1 оператор выполняется за один вызов 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);
5
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: