База данных не копируется из папки ресурсов на устройство

У меня в папке assets есть файл .db. Я скопировал его в папку data/data/<packagename>/databases/ в эмуляторе, и он работает нормально ..

Но когда я запускаю его на устройстве, он закрывается принудительно. Это показывает

SQLite exception: no such table: tbl_user

Вот мой код ..

public class DatabaseHelper extends SQLiteOpenHelper {

        public DatabaseHelper() {

            super(dataContext, DATABASE_NAME, null, 1);

            DB_PATH = "/data/data/"
                    + dataContext.getApplicationContext().getPackageName()
                    + "/databases/";

            Log.d("PATH", DB_PATH);

            boolean dbExist = checkDataBase();
            if (!dbExist) {

                this.getReadableDatabase();
                try {
                    copyDataBase();

                } catch (IOException e) {
                    Log.d("Error", e.toString());
                }
            }

        }

        private void copyDataBase() throws IOException {
            // TODO Auto-generated method stub

            InputStream inFile = dataContext.getAssets().open(DATABASE_NAME);
            String outFileName = DB_PATH + DATABASE_NAME;
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inFile.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }
            // Close the streams
            myOutput.flush();
            myOutput.close();
            inFile.close();
        }

        private boolean checkDataBase() {
            // TODO Auto-generated method stub

            File dbFile = new File(DB_PATH + DATABASE_NAME);

            return dbFile.exists();

        }

Должен ли я делать что-то еще, чтобы скопировать этот БД на устройство ???

Спасибо..


person Deepzz    schedule 29.12.2012    source источник
comment
Я действительно рекомендую использовать SQLiteAssetHelper, поскольку в нем отлажен весь этот процесс, вместо того, чтобы запускать собственный: github.com/jgilfelt/android-sqlite-asset-helper   -  person CommonsWare    schedule 29.12.2012
comment
проверьте эту ссылку reigndesign.com/blog /   -  person Chirag Patel    schedule 03.01.2013


Ответы (2)


Получил ответ ... :)

Отсюда..

http://www.anddev.org/networking-database-problems-f29/missing-table-in-sqlite-with-specific-version-of-desire-hd-t50364.html

это была проблема с версией 2.3.6 ... она работала с другими устройствами ... просто добавил три строки, чтобы решить проблему ...

boolean dbExist = checkDataBase();
        SQLiteDatabase db_Read = null;
        if (!dbExist) 
        {
            db_Read = this.getReadableDatabase(); 
            db_Read.close();

            try 
            {
                copyDataBase();
            } 
            catch (IOException e) 
            {
                Log.d("Error", e.toString());
            }
        }
person Deepzz    schedule 04.01.2013

Просто измените расширение файла базы данных .db в папке с ресурсами на .png или любой другой сжатый формат, который будет работать на устройствах 2.1, 2.2 и выше.

person Lakshmanan    schedule 27.02.2013