Невозможно прочитать таблицу SQLite с Android - PullRequest
1 голос
/ 25 июня 2011

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

public String setColorName() {
    String colorName = null;
    try {
        db = this.openOrCreateDatabase("colors.db",MODE_WORLD_READABLE, null); 
        Cursor cursor = db.rawQuery("SELECT colorName FROM Colors WHERE RGB = '000000'", null);
        if (cursor != null) {
            if (cursor.moveToFirst()){
                do {
                    colorName = cursor.getString(cursor.getColumnIndex("colorName"));
                }while (cursor.moveToNext());
            }
        } else {
            colorName = "woops";
        }
    } catch (NumberFormatException e) {}

    return colorName ;
}

Я нашел много статей по этой проблеме на нескольких форумах (включая stackoverflow), но проблема, с которой я столкнулся, не была решена с их помощью.решения.Я пытаюсь извлечь RGB и имя цвета из кода (приведенный выше запрос - всего лишь тест, ведущий к этому), чтобы я мог оценить ближайший RGB, используя евклидову формулу расстояния для каждой части.Для того, чтобы сделать это, мне нужно, по крайней мере, получить данные из таблицы: P.

LogCat:

    I/Database(12748): sqlite returned: error code = 1, msg = no such table: Colors
D/AndroidRuntime(12748): Shutting down VM
W/dalvikvm(12748): threadid=1: thread exiting with uncaught exception (group=0x4
0015560)
E/AndroidRuntime(12748): FATAL EXCEPTION: main
E/AndroidRuntime(12748): android.database.sqlite.SQLiteException: no such table:
 Colors: , while compiling: SELECT colorName FROM Colors WHERE RGB = '000000'
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteCompiledSql.nat
ive_compile(Native Method)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteCompiledSql.com
pile(SQLiteCompiledSql.java:92)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteCompiledSql.<in
it>(SQLiteCompiledSql.java:65)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteProgram.<init>(
SQLiteProgram.java:83)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteQuery.<init>(SQ
LiteQuery.java:49)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteDirectCursorDri
ver.query(SQLiteDirectCursorDriver.java:42)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteDatabase.rawQue
ryWithFactory(SQLiteDatabase.java:1356)
E/AndroidRuntime(12748):        at android.database.sqlite.SQLiteDatabase.rawQue
ry(SQLiteDatabase.java:1324)

И, наконец, вот изображение браузера SQLite, показывающее, что запрос работает в этой базе данных Запрос SQLiteBrowser

Если картинка не выдала, я храню colors.db в активах.

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

Хорошо, похоже, я справился с проблемой.Мне нужно было скопировать БД из активов, а затем открыть его оттуда.Я закончил тем, что сделал помощника базы данных, используя информацию, которую нашел в ссылке ниже, и я получил базу данных, чтобы перестать возвращать эту ошибку, хотя теперь мне нужно завершить остальную часть приложения.Огромное спасибо за отличный совет всем!http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Из вашего скриншота видно, что у вас есть файл colors.db в вашем каталоге ресурсов.

Хотя я не совсем уверен, как именно оттуда загрузить базу данных SQLite, я знаю, что по умолчанию вспомогательный объект SQLiteDatabase android выполняет чтение и запись в защищенную папку данных приложения. Таким образом, ваш openOrCreateDatabase метод вызывает создание. Но это бомба в запросе, потому что таблица не существует в этой недавно отчеканенной базе данных.

Я уверен, что кто-то еще или немного погуглил, может помочь решить эту проблему дальше.

1 голос
/ 25 июня 2011

Вы создаете базу данных и после этого хотите получить к ней доступ к таблице.Вам не нужно создавать таблицы тоже?Я бы посоветовал вам использовать SQLiteOpenHelper вместо openOrCreateDatabase, чтобы вы не столкнулись с этой проблемой.
Если вы хотите получить доступ к существующей базе данных через assets (как я видел наскриншот), вы можете сослаться на SQLiteException: такой таблицы нет

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