Android SQLiteOpenHelper no puede abrir el archivo de base de datos

Ya sé que el tema ya fue discutido antes. Pero no puedo encontrar la solución a mi problema así que voy a preguntarlo una vez más. Tengo problema que crea la base de datos. He copiado la implementación de SQLiteOpenHelper:

public class DBCreator extends SQLiteOpenHelper { private static final String DATABASE_NAME = "servision.db"; private static final int DATABASE_VERSION = 1; private static final String INFO_TABLE ="create table INFO(key text,value text);"; public static final String GATEWAYS_TABLE = "GATEWAYS"; // Table name public static final String TABLE = "events"; // Columns public static final String TIME = "time"; public static final String TITLE = "title"; public DBCreator(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { String gatewaytablescript ="create table" +GATEWAYS_TABLE+"(" + "id int primary key, " + "host text not null," + "port int not null," + "username text," + "password text,"+ "useproxy int," + "proxyHost text," + "proxyPort port," + "desc text," + "secondaryip text," + "secondaryport int," + "timezone int," + "encryption int," + "customkey text" + ");"; Log.d("DBCreator", "Creating " + GATEWAYS_TABLE + "table"); db.execSQL(gatewaytablescript); String infotablescript ="create table " + INFO_TABLE + "(key text,value text);"; Log.d("DBCreator", "Creating " + INFO_TABLE + "table"); db.execSQL(infotablescript); } catch(SQLException ex) { Log.d("DBCreator", "onCreate exception " +ex.getMessage()); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d("EventsData", "onUpgrade"); if (oldVersion >= newVersion) return; } } 

Y lo creo a partir del método onCreate de la actividad principal como esto.

 DBCreator db =new DBCreator(this); db.getReadableDatabase(); 

En logcat recibo la siguiente información:

 06-01 17:31:15.523: INFO/global(2470): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required. 06-01 17:31:15.652: INFO/Database(4160): sqlite returned: error code = 14, msg = cannot open file at source line 25467 06-01 17:31:15.652: ERROR/Database(4160): sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 6, NULL) failed 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): Couldn't open servision.db for writing (will try read-only): 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): android.database.sqlite.SQLiteException: unable to open database file 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1921) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:883) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:960) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:953) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:602) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at com.servision.svclient.Main.onCreate(Main.java:52) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.os.Handler.dispatchMessage(Handler.java:99) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.os.Looper.loop(Looper.java:123) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at android.app.ActivityThread.main(ActivityThread.java:4627) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at java.lang.reflect.Method.invokeNative(Native Method) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at java.lang.reflect.Method.invoke(Method.java:521) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): at dalvik.system.NativeStart.main(Native Method) 06-01 17:31:15.738: INFO/Database(4160): sqlite returned: error code = 14, msg = cannot open file at source line 25467 06-01 17:31:15.738: ERROR/Database(4160): sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 1, NULL) failed 

OnCreate de DBCreator nunca se llama. Estoy ejecutando el programa en Galaxy S en modo de depuración de Eclipse. ¿Estoy perdiendo algunos permisos? Puede ser el contexto no es bueno o algo?

En relación con el sqlite returned: error code = 14, msg = cannot open file at source line 25467 y sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 1, NULL) failed Error, esto parece ser causado cuando no hay base de datos y Android intenta crear uno.

Algunos leyendo aquí

http://androidblogger.blogspot.com/2011/02/instable-android-and-unable-to-open.html

http://www.itsalif.info/content/check-if-database-exist-android-sqlite3openv2-failed

http://code.google.com/p/android/issues/detail?id=949

Compruebe los permisos en el manifiesto agregue

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Cuando conseguí este error utilicé este código para mi constructor

 public DBClass(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); context.openOrCreateDatabase(DATABASE_NAME, context.MODE_PRIVATE, null); } 

Tenía un problema con mi aplicación, donde el cambio de mi archivo datebase con una fecha antigua después de una reinstalación de la aplicación me dio ese error. Supongo que el problema era que el propietario del archivo DB antiguo no era el mismo que el propietario de los archivos de la aplicación reinstalada. Así que se resolvió dando el nuevo archivo de permisos completos (777) por lo que podría ser leído por otros usuarios también.

Al final, asegúrese de que no tiene un problema de permisos de archivo.

Tuve un problema similar y aquí es cómo lo resolví:

https://stackoverflow.com/a/22743794/1947094

Para resumir:

 adb shell cd /data/data/YOUR.APP.PACKAGE/databases/ ls 

Esto le proporciona una lista de las bases de datos utilizadas por su aplicación.

 cp your_database.db your_database.db_backup rm your_database.db 

Ya bug planteado en este enlace

http://code.google.com/p/android/issues/detail?id=949

Utilizar el siguiente api …

Context.openOrCreateDatabase ("sample.db", MODE_PRIVATE, null);

Prueba este enlace

http://www.itsalif.info/content/check-if-database-exist-android-sqlite3openv2-failed

  • Rendimiento ORM: ¿es greenDAO más rápido que ORMLite?
  • ¿Cómo obtener todos los nombres de tablas en la base de datos Android sqlite?
  • Comportamiento extraño de la consulta SQLite parametrizada
  • Insertar matriz en la base de datos SQLite en android
  • En Android db de SQLite cómo coincidir con valores de columnas particulares que tienen id mismo en varias tablas de una base de datos?
  • Android sqlite eliminar consulta no funciona
  • Versión de SQLite utilizada en Android?
  • Cómo agregar segunda tabla en la base de datos en sqlite?
  • Cómo leer la base de datos de otra aplicación
  • ¿Cuál es el método más rápido para realizar más de 64 combinaciones de tablas en SQlite?
  • Android obtener la imagen de disco de base de datos es malformado (código 11) error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.