Как Android получить доступ к базе данных sqlite, включенной в папку ресурсов - PullRequest
5 голосов
/ 23 февраля 2010

У меня уже есть база данных SQLite. Я положил его в папку assets моего проекта. Я читаю документацию по Android. Он сказал, что для всех баз данных в Android, путь составляет data/data/pack_name/database_name.

Это смутило меня. Я просто поместил его в папку assets, поэтому путь data/data/assets/database_name?

Ответы [ 5 ]

7 голосов
/ 23 февраля 2010

Имя пакета не является именем проекта, имя пакета является пространством имен. По ссылке Энтони.

Не забудьте изменить YOUR_PACKAGE в пространство имен пакета вашего приложения (т.е. com.examplename.myapp) в DB_PATH строка.

Например, из учебника Hello World , имя проекта HelloAndroid, но имя пакета com.example.helloandroid

Если бы у этого приложения была база данных, оно было бы сохранено в data/data/com.example.helloandroid/database

Чтобы посмотреть, как это работает с другими приложениями, вы можете запустить свой эмулятор. В строке меню у вас есть имя вашего avd (я думаю, что оно означает Android Virtual Device). По моему это "авдессей: 5554"

(В Linux) В командной строке введите:

adb -s emulator-5554 shell

Вы должны заменить 5554 на любой порт, который вы используете.

если у вас есть командная строка '#', вы можете набрать:

cd data/data

Там вы увидите, что все в форме имени пакета.

Подробнее здесь

6 голосов
/ 23 февраля 2010

Когда вы создаете базу данных, используя SQLiteDatabase или SQLiteOpenHelper классов, это создает базу данных в вашем data/data/package_name/database.

Вы можете получить доступ к этому ресурсу, используя

InputStream myInput = myContext.getAssets().open(your_database_here);

Любую другую информацию смотрите на Использование собственной базы данных SQLite в приложениях Android

* * Часть пути package_name, будет именем вашей посылки . Вы можете найти название пакета в первой строке в ваших .java файлах.

В качестве примера мой класс начинается с этого сверху

package com.forloney.tracker;

Итак, моя база данных находится в папке data/data/com.forloney.tracker/database.

Надеюсь, это имеет смысл.

1 голос
/ 05 сентября 2010

@ ScCrow Я тоже последовал этому примеру и у меня были те же проблемы, что и у вас, пока я не понял, что не правильно использую DataBaseHelper (или, скорее, из-за этой причуды, которую я пропустил).

Когда вы используете класс DatabaseHelper в своей деятельности, вы должны сначала убедиться, что вы вызываете createDatabase! Если вы посмотрите на код для openDatabase, он НЕ проверяет, существует ли база данных, поэтому вы должны (пытаться) создать базу данных в каждом действии, в котором вы ее используете, или изменить метод openDatabase, чтобы убедиться, что дБ существует. Размещенная ссылка на самом деле инструктирует вас использовать ее таким образом, но вы (как и я), возможно, замаскировали это.

Bad:

DBAdapter db = new DBAdapter(this);
db.openDataBase(); //Bad! db not created yet!

Хорошо:

DBAdapter db = new DBAdapter(this);
db.createDataBase(); //needs exception handling
db.openDataBase();
0 голосов
/ 02 мая 2013

В вашем DBAdapter.java измените тип возврата метода openDatabase на SQLiteDatabase.

При доступе к базе данных просто используйте SQLiteDatabase data = db.openDatabase(), где db равно DBAdapter db = new DBAdapter(this).

0 голосов
/ 22 апреля 2010

Когда я пытаюсь открыть свою БД, я получаю "невозможно открыть файл базы данных". Я предполагаю, что не найдена БД и нет какой-то другой ошибки программиста. В журнале я вижу следующее, что выглядит хорошо для меня.

   sqllite3_open_v2("/data/data/com.isildo.HelloListView/databases/ListsDB" ...

Это настройка

private static String DB_PATH = "/data/data/com.isildo.HelloListView/databases/";    
private static String DB_NAME = "ListsDB";

В активах моих проектов в Package Explorer я вижу базу данных ListsDb.

Так что я, по крайней мере, думаю, что все правильно. Я использую пример в [http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/]

В одном из постов здесь кто-то предлагает предложение по настройке некоторых параметров активов. {нет ответа на сообщение там}

**To get an ASSETS folder into your APK:
  In /nbproject/project.properties, 
     change assets.dir=
to
     assets.dir=assets 
     assets.available=true
In /nbproject/build-impl.xml, there is line in the “if=assets.available” target that reads
that needs to be changed to**

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

Да, я новичок в окружающей среде, так что я могу просто не найти их. Я использую Затмение на окнах.

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