android.database.sqlite.SQLiteCantOpenDatabaseException: неизвестная ошибка (код 14): не удалось открыть базу данных

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

AndroidManifest.xml

            

Выход Logcat

согласно logcat, это вызвано SQLiteCantOpenDatabaseException

 06-10 23:07:01.831: E/Trace(4419): error opening trace file: No such file or directory (2) 06-10 23:07:03.611: E/SQLiteLog(4419): (14) cannot open file at line 30176 of [00bb9c9ce4] 06-10 23:07:03.621: E/SQLiteLog(4419): (14) os_unix.c:30176: (2) open(/data/data/com.example.quotes/databasesQuotesdb) - 06-10 23:07:03.641: E/SQLiteDatabase(4419): Failed to open database '/data/data/com.example.quotes/databasesQuotesdb'. 06-10 23:07:03.641: E/SQLiteDatabase(4419): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at com.example.quotes.DataBaseHelper.checkDataBase(DataBaseHelper.java:94) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at com.example.quotes.DataBaseHelper.createDataBase(DataBaseHelper.java:58) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at com.example.quotes.MainActivity.onCreate(MainActivity.java:34) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.Activity.performCreate(Activity.java:5104) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.ActivityThread.access$600(ActivityThread.java:141) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.os.Handler.dispatchMessage(Handler.java:99) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.os.Looper.loop(Looper.java:137) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at java.lang.reflect.Method.invokeNative(Native Method) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at java.lang.reflect.Method.invoke(Method.java:511) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-10 23:07:03.641: E/SQLiteDatabase(4419): at dalvik.system.NativeStart.main(Native Method) 06-10 23:07:03.731: E/SQLiteLog(4419): (14) cannot open file at line 30176 of [00bb9c9ce4] 06-10 23:07:03.731: E/SQLiteLog(4419): (14) os_unix.c:30176: (2) open(/data/data/com.example.quotes/databasesQuotesdb) - 06-10 23:07:03.781: E/SQLiteDatabase(4419): Failed to open database '/data/data/com.example.quotes/databasesQuotesdb'. 06-10 23:07:03.781: E/SQLiteDatabase(4419): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at com.example.quotes.DataBaseHelper.openDataBase(DataBaseHelper.java:145) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at com.example.quotes.MainActivity.onCreate(MainActivity.java:44) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.Activity.performCreate(Activity.java:5104) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.ActivityThread.access$600(ActivityThread.java:141) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.os.Handler.dispatchMessage(Handler.java:99) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.os.Looper.loop(Looper.java:137) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at java.lang.reflect.Method.invokeNative(Native Method) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at java.lang.reflect.Method.invoke(Method.java:511) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-10 23:07:03.781: E/SQLiteDatabase(4419): at dalvik.system.NativeStart.main(Native Method) 06-10 23:07:03.791: D/AndroidRuntime(4419): Shutting down VM 06-10 23:07:03.791: W/dalvikvm(4419): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 06-10 23:07:03.831: E/AndroidRuntime(4419): FATAL EXCEPTION: main 06-10 23:07:03.831: E/AndroidRuntime(4419): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.quotes/com.example.quotes.MainActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread.access$600(ActivityThread.java:141) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.os.Handler.dispatchMessage(Handler.java:99) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.os.Looper.loop(Looper.java:137) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-10 23:07:03.831: E/AndroidRuntime(4419): at java.lang.reflect.Method.invokeNative(Native Method) 06-10 23:07:03.831: E/AndroidRuntime(4419): at java.lang.reflect.Method.invoke(Method.java:511) 06-10 23:07:03.831: E/AndroidRuntime(4419): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-10 23:07:03.831: E/AndroidRuntime(4419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-10 23:07:03.831: E/AndroidRuntime(4419): at dalvik.system.NativeStart.main(Native Method) 06-10 23:07:03.831: E/AndroidRuntime(4419): Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 06-10 23:07:03.831: E/AndroidRuntime(4419): at com.example.quotes.DataBaseHelper.openDataBase(DataBaseHelper.java:145) 06-10 23:07:03.831: E/AndroidRuntime(4419): at com.example.quotes.MainActivity.onCreate(MainActivity.java:44) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.Activity.performCreate(Activity.java:5104) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-10 23:07:03.831: E/AndroidRuntime(4419): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-10 23:07:03.831: E/AndroidRuntime(4419): ... 11 more 06-10 23:07:04.083: D/dalvikvm(4419): GC_CONCURRENT freed 203K, 11% free 2676K/3000K, paused 25ms+18ms, total 306ms 06-10 23:07:07.811: I/Process(4419): Sending signal. PID: 4419 SIG: 9 

DataBaseHelper.java

 public class DataBaseHelper extends SQLiteOpenHelper{ //The Android's default system path of your application database. private static String DB_PATH = "/data/data/com.example.quotes/databases"; private static String DB_NAME = "Quotesdb"; // Table Names of Data Base. static final String TABLE_Name = "Quotes"; // Contacts Table Columns names //private static final String _Id = "_Id"; //private static final String quotes = "quotes"; //private static final String author = "author"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); SQLiteDatabase db_Read = null; if(dbExist){ //do nothing - database already exist }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. db_Read = this.getReadableDatabase(); db_Read.close(); try { copyDataBase(); } catch (IOException e) { //throw new Error("Error copying database"); e.toString(); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } /*// Getting single contact public List getQuote(int id) { ArrayList(); getReadableDatabase(); Cursor cursor = db.query(TABLE_Name, new String[] { _Id, qotes,author }, _Id + "=?", new String[] { String.valueOf(id) }, null, null, null, null); //String query = "SELECT _Id, qotes, author From "+TABLE_Name; //String query = "SELECT * From Quotes"; //Cursor cursor = db.rawQuery(query, null); if (cursor != null) cursor.moveToFirst(); Quotes quotes = new Quotes(Integer.parseInt(cursor.getString(0)), cursor.getString(1),cursor.getString(2)); QuoteList.add(quotes); return QuoteList; } */ } 

    Добавьте это разрешение в файл AndroidManifest.xml вашего проекта в теге manifest (который должен быть тегом верхнего уровня).

      

    Замените код checkDataBase () следующим кодом:

     File dbFile = myContext.getDatabasePath(DB_NAME); return dbFile.exists(); 

    Вы можете столкнуться с этой проблемой, если вы запускаете свое приложение на Marshmallow или более поздней версии Android (уровень API 23 или выше) из-за новой модели разрешений в режиме реального времени, представленной в этом.

    Начиная с Android 6.0 (уровень API 23), пользователи предоставляют разрешения для приложений во время работы приложения, а не при установке приложения. Этот подход упрощает процесс установки приложения, поскольку пользователю не нужно предоставлять разрешения при установке или обновлении приложения.

    Для получения разрешений во время выполнения вы должны будете запросить пользователя. Вы можете сделать это следующим образом.

    Первый запрос для разрешений.

     String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; requestPermissions(permissions, WRITE_REQUEST_CODE); 

    И тогда вы можете проверить результаты в

     @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case WRITE_REQUEST_CODE: if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ //Permission granted. //Continue with writing files... } else{ //Permission denied. } break; } } 

    Вот хороший источник обучения – запрос-runtime-permissions-in-android-marshmallow /

    Это может быть вызвано плохими разрешениями или SELinux. Убедитесь, что разрешения и владелец / группа установлены правильно. Затем запустите это:

     restorecon /data/data/your.app.folder/databases/your.db 

    restorecon восстанавливает стандартный по умолчанию контекст безопасности SELinux

    Я думаю, это потому, что ваш DB_Path заканчивается без «/». Когда вы объединяете путь с базой данных, переменная myPath имеет следующую строку: "/data/data/com.example.quotes/databasesQuotesdb" .

    Я предлагаю эти изменения:

     private static String DB_PATH = "/data/data/com.example.quotes/databases/"; private static String DB_NAME = "Quotesdb.db"; 

    И еще одно: вы должны открыть базу данных в основной деятельности и реализовать onPause() и onResume() с помощью database.close() и database.open() соответственно. Это мой пример для Основной деятельности (используется с Cordova, веб-дизайном и всем материалом = P):

     package home.shell.accessApp; import android.os.Bundle; import android.util.Log; import org.apache.cordova.*; public class AccessApp extends CordovaActivity { private SellitDAO db; //This is the class name for my SQLiteOpenHelper @Override public void onCreate(Bundle savedInstanceState) { db = new SellitDAO(this); db.open(); super.onCreate(savedInstanceState); super.init(); // Set by  in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html") } @Override public void onPause() { super.onPause(); db.close(); } @Override public void onResume() { super.onResume(); db.open(); } } 

    Удачи!!!

    DB_PATH указывал на другую базу данных. Измените его в вспомогательном classе базы данных и моем коде.

     private static String DB_PATH = "/data/data/com.example.abc"; 

    Я не думаю, что это твоя проблема, но она по-прежнему выглядит довольно плохо для меня. У вас есть дубликат слоя com.examples.quote в вашем проекте. Раздел вашей деятельности в вашем AndroidManifest.xml должен выглядеть следующим образом:

            

    Вы можете даже иметь свои classы под командами src / com.example.quotes / com.example.quotes, а не только в com.example.quotes.

    Я не уверен, что это вызывает вашу проблему. Но это выглядит немного испорченным. Все ваши другие вещи выглядят довольно стандартно для меня.

    @nmr также проверяет право собственности и группы на самом файле sqlite … Я скопировал свою базу данных из / sdcard как root, поэтому мне пришлось менять разрешения.

     -rw-rw---- root root 180224 2014-05-05 11:06 test.sqlite 

    должно быть..

     -rw-rw---- u0_a80 u0_a80 180224 2014-05-05 11:06 test.sqlite 

    Для установки правильного владельца и группы использовались следующие команды. u0_a80 Я получил от ls -al на других файлах в каталоге

     chown u0_a80 test.sqlite chgrp u0_a80 test.sqlite 

    Мой гремлин для этой проблемы был прав доступа к файлу:

    Хорошие разрешения:

     drwxr-x--x u0_a20 u0_a20 2013-11-13 20:45 com.google.earth drwxr-x--x u0_a63 u0_a63 2013-11-13 20:46 com.nuance.xt9.input drwxr-x--x u0_a53 u0_a53 2013-11-13 20:45 com.tf.thinkdroid.sg drwxr-x--x u0_a68 u0_a68 2013-12-24 15:03 eu.chainfire.supersu drwxr-x--x u0_a59 u0_a59 2013-11-13 20:45 jp.co.omronsoft.iwnnime.ml drwxr-x--x u0_a60 u0_a60 2013-11-13 20:45 jp.co.omronsoft.iwnnime.ml.kbd.white drwxr-x--x u0_a69 u0_a69 2013-12-24 15:03 org.mozilla.firefox 

    Плохие разрешения:

     [email protected]:/data/data # ls -lad com.mypackage drw-rw-r-- u0_a70 u0_a70 2014-01-11 14:18 com.mypackage 

    Как они так поступили? Я поставил их таким образом, возившись вокруг, пытаясь заставить adb pull приступить к работе. Ясно, что я сделал это неправильно.

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

    Я в последнее время придумал эту ошибку. Но это было еще более странно. Я работал над Android N, и все шло нормально, пока я не тестировал JellyBeans и Lollipop. В котором я продолжал получать ту же ошибку БД.

    android.database.sqlite.SQLiteCantOpenDatabaseException: неизвестная ошибка (код 14): Не удалось открыть базу данных 06-10 23: 07: 03.641: E / SQLiteDatabase (4419):

    У меня были права в моем манифесте, в том числе:

      

    Проблема заключалась в этой строке в моем DataBaseHelper.java :

     private static String DB_PATH = "/data/data/com.example.quotes/databases"; 

    которые необходимо было загрузить из контекста следующим образом:

     String DB_PATH = getContext().getApplicationInfo().dataDir+"/databases/"; 

    Теперь работает правильно SDK 17.

    Добавьте перед OpenDatabase следующие строки:

     File outFile = new File(Environment.getDataDirectory(), outFileName); outFile.setWritable(true); SQLiteDatabase.openDatabase(outFile.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE); 

    Как уже упоминалось @CommonsWare, вы захотите попробовать помощник для Android android sqlite . Это сделало для меня открытие существующего db куска пирога.

    Я буквально работал примерно через полчаса, потратив 3 часа, пытаясь сделать все это вручную. Смешно, я думал, что делаю то же самое, что и библиотека для меня, но чего-то не хватало!

    Очистка данных приложения помогла мне в этом. Это может помочь вам.

    Убедитесь, что вы не пытаетесь постоянно открывать и закрывать базу данных из основного streamа или фонового streamа.

    Создайте class singleton в своем приложении и попытайтесь создать и открыть данные только из этого classа.

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

    Во всем своем приложении используйте тот же подход для получения объекта sqLiteDatabase, когда это требуется.

    Я использовал ниже код, и моя проблема решена теперь через 1,5 дня.

     ............................................................... 

    В методе classа Activity onCreate ()

     public class MainActivity extends AppCompatActivity { private AssetsDatabaseHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { helper = AssetsDatabaseHelper.getInstance(this); sqLiteDatabase = helper.getDatabase(); } } public class AssetsDatabaseHelper { Context context; SQLiteDatabase sqLiteDatabase; DatabaseHelper databaseHelper; private static AssetsDatabaseHelper instance; private AssetsDatabaseHelper(Context context){ this.context = context; databaseHelper = new DatabaseHelper(context); if(databaseHelper.checkDatabase()){ try{ databaseHelper.openDatabase(); }catch(SQLException sqle){ Log.e("Exception in opening ", " :: database :: sqle.getCause() : "+sqle.getCause()); } }else{ try{ databaseHelper.createDatabase(); }catch(IOException ioe){ Log.d("Exception in creating ", " :: database :: ioe.getCause() : "+ioe.getCause()); } try{ databaseHelper.openDatabase(); }catch(SQLException sqle){ Log.e("Exception in opening ", " :: database :: "+sqle.getCause()); } } sqLiteDatabase = databaseHelper.getSqLiteDatabase(); } public static AssetsDatabaseHelper getInstance(Context context){ if(instance != null){ return instance; }else { instance = new AssetsDatabaseHelper(context); return instance; } } public SQLiteDatabase getDatabase(){ return sqLiteDatabase; } } 
    Давайте будем гением компьютера.