Я копирую существующую базу данных до /data/data/packagename/databases
, используя код, полученный из using-your-own-sqlite-database-in-android-applications
После копирования я получаю следующее сообщение журнала об открытии базы данных:
Нет такой таблицы android_metadatap >
Нужно ли создавать таблицу с именем android_metadata? И какие значения мне нужно вставить в эту таблицу базы данных
Большое спасибо
Собственно, с чуть большим чтением я обнаружил, что мне нужно
используйте флаг SQLiteDatabase.NO_LOCALIZED_COLLATORS
при вызове
SQLiteDatabase.openDatabase()
- это больше не вызывает проблемы.
Используйте
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
или
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
Похоже, что по какой-то причине андроид требует, чтобы каждая база данных имела таблицу с именем android_metadata, которая включает по крайней мере одну локаль. В блоге reigndesign вы упомянули, как создать таблицу и заполнить ее языковой версией.
Проверьте, содержит ли ваша база данных эту таблицу, а таблица имеет некоторый контент.
это могут быть просто права доступа к файлам - сообщение об ошибке вводит в заблуждение. сначала вам нужно узнать идентификатор пользователя приложения (предполагается, что у вас есть 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>
Когда вы копируете базу данных из своего каталога ресурсов, например, у вас должна быть уже создана таблица android_metadata. В этой таблице должно быть два столбца:
_id = an integer value
locale = en
Я уже использую, как указано в этой ссылке в течение длительного времени.
Это работает. Проверьте свою базу данных снова, создав таблицу или нет?
Я предпочитаю устанавливать плагин SQLite Manager в firefox для работы с базами данных sqlite.. после завершения всего процесса, упомянутого в той же ссылке..
Оформить заказ http://www.devx.com/wireless/Article/40842/1954.
Он содержит все операции с базой данных.
В моем случае я обнаружил, что эта ошибка произойдет, если я оставлю open transaction
влево.
Другими словами: если вы забудете транзакцию commit
или rollback
, в следующий раз, когда вы входите в приложение, эта ошибка повышается.