Таблица SQLite не существует исключение для существующей базы данных SQLite (и таблицы) - PullRequest
1 голос
/ 07 февраля 2011

Я следовал приведенным инструкциям для введения существующей базы данных SQLite в ваше приложение для Android.

Когда я запрашиваю таблицу "android_metadata", это нормально. Но когда я выполняю аналогичный запрос к моей собственной таблице «слова» (в которой есть первичный целочисленный ключ _id), я получаю исключение таблицы, и приложение вылетает.

Почему это?

Код:

Cursor c = myDatabase.query("android_metadata", null, null, null, null, null, null, null);

работает, но

Cursor c = myDatabase.query("words", null, null, null, null, null, null, null);

возвращает таблицу не существует исключение.

Вот как я создаю базу данных (ссылки на пути и имена файлов верны):

private void copyDatabase() throws IOException
{
    //Open local db as the input stream
    InputStream myInput = mContext.getAssets().open(DB_NAME);

    //Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length = 0;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
}

(Примечание. На мой взгляд, таблица есть. Я смотрю на нее прямо в браузере SQLite.)

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Ты следуешь за красной сельдью. Таблица android_metadata создается в каждой базе данных Android независимо от того, что.

Реальный механизм определения вашей проблемы - просто запустить ваше приложение в эмуляторе и проверить базу данных. Если ваш эмулятор работает, а приложение настроило базу данных, запустите:

adb shell
cd /data/data/your.application.package/databases
ls

, если ls показывает ожидаемое имя базы данных, запустите:

sqlite3 <your db file>

при запуске sqlite3: .schema

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

0 голосов
/ 07 февраля 2011

Вместо этого вы можете попытаться создать свою БД с помощью SQLiteHelpter.Он проверяет, существует ли он, и если нет, то создает его без каких-либо дополнительных усилий для вас.

Я уже публиковал пример по другому вопросу, проверьте его здесь:
Android - метод базы данных Sqliteнеопределенный тип fot

Надеюсь, это поможет:)

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