2015-06-10 2 views
-1

У меня проблема с SQLiteAssetHelper (https://github.com/jgilfelt/android-sqlite-asset-helper): Я не могу правильно открыть таблицы в моей базе данных.Не удается получить доступ к двум таблицам в одной базе данных

База данных создана с использованием sqlitebrowser.
У меня есть база данных с двумя таблицами, заполненными строками, которые я хочу, чтобы получить доступ с помощью курсора, но когда я пытаюсь получить доступ к их обоих, он дает мне ошибку:

android.database.sqlite.SQLiteException: no such table: Verbs (code 1): , while compiling: SELECT LatinVerbs FROM Verbs WHERE _rowid_=? 

Мой контракт базы данных:

import android.provider.BaseColumns; 

public class DatabaseContract { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "verbtable.db"; 
    private static final String TEXT_TYPE = " TEXT"; 
    private static final String COMMA_SEP = ","; 

    private DatabaseContract(){} 
    public static abstract class Table1 implements BaseColumns{ 
     public static final String TABLE_NAME = "Verbs"; 
     public static final String COLUMN_NAME_TITLE_COL1 = "LatinVerbs"; 
     public static final String COLUMN_NAME_TITLE_COL2 = "Translation"; 
     public static final String SQL_CREATE_ENTRIES = 
       "CREATE TABLE " + TABLE_NAME + " (" + 
         _ID + " INTEGER PRIMARY KEY," + 
         COLUMN_NAME_TITLE_COL1 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL2 + TEXT_TYPE + COMMA_SEP + 
         ")"; 
     public static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; 

    } 
    public static abstract class Table2 implements BaseColumns{ 
     public static final String TABLE_NAME = "Structure"; 
     public static final String COLUMN_NAME_TITLE_COL1 = "infinitive"; 
     public static final String COLUMN_NAME_TITLE_COL2 = "pers_id"; 
     public static final String COLUMN_NAME_TITLE_COL3 = "ind_praes_act"; 
     public static final String COLUMN_NAME_TITLE_COL4 = "ind_praes_pass"; 
     public static final String COLUMN_NAME_TITLE_COL5 = "ind_impf_act"; 
     public static final String COLUMN_NAME_TITLE_COL6 = "ind_impf_pass"; 
     public static final String COLUMN_NAME_TITLE_COL7 = "ind_fut_act"; 
     public static final String COLUMN_NAME_TITLE_COL8 = "ind_fut_pass"; 
     public static final String SQL_CREATE_ENTRIES = 
       "CREATE TABLE " + TABLE_NAME + " (" + 
         _ID + " INTEGER PRIMARY KEY," + 
         COLUMN_NAME_TITLE_COL1 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL2 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL3 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL4 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL5 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL6 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL7 + TEXT_TYPE + COMMA_SEP + 
         COLUMN_NAME_TITLE_COL8 + TEXT_TYPE + COMMA_SEP + 
         ")"; 
     public static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; 
    } 
} 

Мои курсоры:

Cursor c = db.query(DatabaseContract.Table1.TABLE_NAME, columns, "_rowid_=?", selectionArgsRoot, null, null, null); 

int index = c.getColumnIndexOrThrow(columns[0]); 
c.moveToFirst(); 
do { 
    rootResult = c.getString(index); 
} while (c.moveToNext()); 

c.close(); 

c = db.query(DatabaseContract.Table2.TABLE_NAME, columnSuffix, "pers_id=?", selectionArgsSuffix, null, null, null); 
index = c.getColumnIndexOrThrow(columnSuffix[0]); 
c.moveToFirst(); 
do{ 
    suffix = c.getString(index); 
}while(c.moveToNext()); 
c.close(); 

Я пытался обновить версию базы данных и перезапустить эмулятор я бегала мой код, но ошибка все равно остается.

+0

Ну, как говорится, таблицы «Глаголы» не существует. Как вы подтвердили правильность создания таблиц? – miki

ответ

0

Вы когда-нибудь запускали программу с созданием базы данных раньше? Если у вас есть, вам нужно увеличить номер версии своей базы данных. Это нужно делать, когда вы делаете дополнения.

Вы также можете попробовать удалить приложение в эмулятор и перезапустить новую установку.

+0

Спасибо! удаление приложения сделало трюк! Я думаю, что эмулятор не заметил, что база данных изменилась, потому что имя файла осталось прежним, поэтому оно продолжало использовать старую версию в своей локальной памяти. – RJG

+0

В качестве побочного примечания вы можете посмотреть на использование Android ORM, например, SugarORM, ORMLite, GreenDAO и т. Д. Проверьте это http://www.sitepoint.com/5-best-android-orms/ –

0

Обе таблицы не созданы.
В фактах вы добавляете дополнительную запятую после последнего столбца на каждую таблицу.

Здесь:

COLUMN_NAME_TITLE_COL2 + TEXT_TYPE + COMMA_SEP + 
")"; 

И здесь:

COLUMN_NAME_TITLE_COL8 + TEXT_TYPE + COMMA_SEP + 
")"; 

Эти линии должны быть на самом деле:

COLUMN_NAME_TITLE_COL2 + TEXT_TYPE + ")"; 

И:

COLUMN_NAME_TITLE_COL8 + TEXT_TYPE + ")"; 

Соответственно

+0

Код на официальный сайт заканчивается запятыми, поэтому я не думаю, что это может быть проблемой (http://developer.android.com/training/basics/data-storage/databases.html). Но спасибо за ответ! – RJG

+0

'Код на официальном сайте заканчивается запятыми, поэтому я не думаю, что это может быть проблемой' ** Код на официальном сайте НЕ заканчивается добавленными запятыми **. Читайте лучше: 'FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP + ... // Любые другие опции для команды CREATE' –