Могу ли я загрузить базу данных SQLite на / SDCard и получить к ней доступ из своего приложения для Android? - PullRequest
32 голосов
/ 28 июня 2009

Я уже обнаружил, что нет способа связать файлы в .apk и поместить их в / sdcard, лучший вариант на данный момент - скачивать большие файлы при первом запуске. Я наткнулся на учебник, в котором говорится, как связать базу данных sqlite с apk, а затем скопировать ее, чтобы к ней можно было обращаться с помощью SQLiteDatabase (таким образом, удваивая необходимое пространство, и вообще не используя / sdcard).

http://developer.android.com/guide/topics/data/data-storage.html#db говорит, что все базы данных ДОЛЖНЫ быть в / data / data / package_name / database.

Это действительно так? Есть ли способ заставить фреймворк открыть базу данных, которая находится в разделе / ​​sdcard? Есть ли способ использовать другую оболочку / среду Javaite SQLite для доступа к таким базам данных?

Если ответ на вышеприведенный ответ «Нет», какие еще варианты у меня есть? Мои данные очень хорошо представлены в реляционной модели, но они слишком большие, плюс я хочу иметь возможность обновлять их без необходимости переустанавливать / обновлять все приложение.

Ответы [ 5 ]

44 голосов
/ 28 июня 2009

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

File dbfile = new File("/sdcard/mydb.sqlite" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());
7 голосов
/ 13 сентября 2012

Попробуйте это:

String dir = Environment.getExternalStorageDirectory().getPath()
File dbfile = new File(dir+"/mydb.sqlite"); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());
1 голос
/ 05 марта 2014

Я делюсь следующим кодом. Объявить opcionesMenu Vector<String>

Vector < String > opcionesMenu = new Vector< String >();
// the database is SDCard. I saw  the code to Blackberry (net.rim)
String rutaDB = "/storage/extSdCard/Android/databases/Offshore.db";


    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(rutaDB, null);

    Cursor cursor = db.rawQuery("SELECT Codigo, Nombre FROM Ruta ORDER BY Codigo, Nombre", null);

    if (cursor.moveToFirst())
    {
        do
        {
            opcionesMenu.add(cursor.getString(0) + " - " + cursor.getString(1));
        } while(cursor.moveToNext());
    }

    db.close();
1 голос
/ 26 апреля 2011
1 голос
/ 29 марта 2011

Просто идея:

  • вы можете поместить файл database.db в папку активов.

  • если размер файла database.db превышает 2 МБ, система не может его сжать, поэтому вам нужны другие варианты

  • вы можете переименовать ваш database.db, например, database.jit или database.mp3 - которые не сжаты, чем при первом запуске вы можете переименовать его в database.db

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