Нет такой таблицы android_metadata, в чем проблема? - PullRequest
53 голосов
/ 27 марта 2010

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

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

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

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

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

Ответы [ 7 ]

107 голосов
/ 13 апреля 2010

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

30 голосов
/ 14 марта 2012

Использование

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

или

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
4 голосов
/ 17 июня 2010

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

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

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

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

_id = an integer value
locale = en
2 голосов
/ 08 июня 2011

это также могут быть только права доступа к файлу - сообщение об ошибке вводит в заблуждение. Для начала вам нужно узнать идентификатор пользователя приложения (предполагается, что у вас есть права 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 голосов
/ 27 марта 2010

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

Это работает .. Оформите вашу БД снова созданную таблицу или нет?

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

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

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

1 голос
/ 16 февраля 2011

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

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

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