Нет такой таблицы android_metadata, в чем проблема?

55

Я копирую существующую базу данных до /data/data/packagename/databases, используя код, полученный из using-your-own-sqlite-database-in-android-applications

После копирования я получаю следующее сообщение журнала об открытии базы данных:

Нет такой таблицы android_metadata​​p >

Нужно ли создавать таблицу с именем android_metadata? И какие значения мне нужно вставить в эту таблицу базы данных

Большое спасибо

  • 3
    Если это решено, примите правильный ответ, чтобы он больше не помечался как неотвеченный.
Теги:

7 ответов

101

Собственно, с чуть большим чтением я обнаружил, что мне нужно используйте флаг SQLiteDatabase.NO_LOCALIZED_COLLATORS при вызове SQLiteDatabase.openDatabase() - это больше не вызывает проблемы.

  • 0
    SQLiteDatabase.NO_LOCALIZED_COLLATORS решил это за меня! Благодарю.
  • 0
    Этот совет спасает мою голову. Большое спасибо.
Показать ещё 1 комментарий
30

Используйте

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);

или

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
  • 2
    Это действительно просто. Просто добавьте разрешение на запись в базу данных, и Android автоматически добавит эту таблицу.
  • 0
    Могу ли я использовать это с READ_ONLY также?
4

Похоже, что по какой-то причине андроид требует, чтобы каждая база данных имела таблицу с именем android_metadata, которая включает по крайней мере одну локаль. В блоге reigndesign вы упомянули, как создать таблицу и заполнить ее языковой версией.

Проверьте, содержит ли ваша база данных эту таблицу, а таблица имеет некоторый контент.

2

это могут быть просто права доступа к файлам - сообщение об ошибке вводит в заблуждение. сначала вам нужно узнать идентификатор пользователя приложения (предполагается, что у вас есть root-доступ):

$ adb shell grep <packagename> /data/system/packages.xml

вывод должен выглядеть так:

<package name="com.fsck.k9" codePath="/data/app/com.fsck.k9-1.apk" 
nativeLibraryPath="/data/data/com.fsck.k9/lib" 
flags="0" ft="1306ecac340" it="1306ecac9d2" ut="1306ecac9d2"
version="14001" userId="10002">

userId здесь 10002.

затем исправить разрешения:

$ adb shell chown -R 10002:10002 /data/data/<packagename>
2

Когда вы копируете базу данных из своего каталога ресурсов, например, у вас должна быть уже создана таблица android_metadata. В этой таблице должно быть два столбца:

_id = an integer value
locale = en
  • 0
    ошибка в андроид O
2

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

Это работает. Проверьте свою базу данных снова, создав таблицу или нет?

Я предпочитаю устанавливать плагин SQLite Manager в firefox для работы с базами данных sqlite.. после завершения всего процесса, упомянутого в той же ссылке..

Оформить заказ http://www.devx.com/wireless/Article/40842/1954.

Он содержит все операции с базой данных.

1

В моем случае я обнаружил, что эта ошибка произойдет, если я оставлю open transaction влево.

Другими словами: если вы забудете транзакцию commit или rollback, в следующий раз, когда вы входите в приложение, эта ошибка повышается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню