2014-12-18 28 views
5

Başka bir Uygulamadan bir db dosyasını kopyalar ve daha sonra db düzenleyen bir Uygulama yapıyorum. SQLite veritabanı: bilinmeyen hata (kod 14): Veritabanı açılamadı

android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 

bir ben İNTERNET gördüğü farklı yaklaşımların çok ve hiçbir şey çalıştı

çalışır:

Ben bir hata alıyorum db de SQLite açmaya

.

public class FirstRunService extends IntentService{ 
    /** 
    * Creates an IntentService. Invoked by your subclass's constructor. 
    * 
    * Service Used to name the worker thread, important only for debugging. 
    */ 
    public FirstRunService() { 
     super("Service"); 
    } 
    String filesdir; 
    SharedPreferences sp; 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     //Cargo SharedPreferences 
     sp = this.getSharedPreferences("FirstRun", Context.MODE_PRIVATE); 
     //Asigno filesdir 
     filesdir = intent.getStringExtra("filesdir"); 
     //Subo XX 
     Boolean XX = sp.getBoolean("XX",false); 
     if(!XX) { 
      uploadxxs(intent); 
     } 


    } 

    protected void uploadXX (Intent intent){ 
     //Preparo 
     SQLiteDatabase db; 
     myFTP myftp = new myFTP(); 
     FTPClient client; 

     //Copio la Base de datos 

     RootTools.deleteFileOrDirectory(filesdir + "/XX.db", true); 
     RootTools.copyFile("/data/data/com.XX/databases/XX.db", filesdir+"/xx.db",true,false); 
     try { 
      RootTools.getShell(true).add(cmd); 
     } catch (TimeoutException e) { 
      e.printStackTrace(); 
      Log.e("Root XX.db","Fallo"); 
      FirstRunAlarm.completeWakefulIntent(intent); 
      stopService(intent); 
     } catch (RootDeniedException e) { 
      e.printStackTrace(); 
      Log.e("Root XX.db","Fallo"); 
      FirstRunAlarm.completeWakefulIntent(intent); 
      stopService(intent); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.e("Root XX.db","Fallo"); 
      FirstRunAlarm.completeWakefulIntent(intent); 
      stopService(intent); 
     } 
     //Edito db 
      //Edito db 
    File file = new File(filesdir+"/wa.db"); 
    if (file.exists()){ 
     Log.e("File","Existe"); 
     db = SQLiteDatabase.openDatabase(filesdir+"/wa.db", null,SQLiteDatabase.OPEN_READWRITE);//Error in this line 
    }else{ 
     db = null; 
     Log.e("File","No Existe"); 
    } 
     db.execSQL("DROP TABLE android_metadata;"); 

Logcat:

12-17 22:38:17.401 15227-15242/com.lstupenengo.primeraapp E/File﹕ Existe 
12-17 22:38:17.402 3076-3366/com.lstupenengo.primeraapp E/SQLiteLog﹕ (14) cannot open file at line 30192 of [00bb9c9ce4] 
12-17 22:38:17.402 3076-3366/com.lstupenengo.primeraapp E/SQLiteLog﹕ (14) os_unix.c:30192: (13) open(//data/data/com.lstupenengo.primeraapp/files/XX.db) - 
12-17 22:38:17.412 3076-3366/com.lstupenengo.primeraapp E/SQLiteDatabase﹕ Failed to open database 'data/data/com.lstupenengo.primeraapp/files/XX.db'. 
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
      at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
      at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 
      at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 
      at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
      at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
      at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
      at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 
      at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 
      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 
      at com.lstupenengo.primeraapp.FirstRunService.uploadXX(FirstRunService.java:105) 
      at com.lstupenengo.primeraapp.FirstRunService.onHandleIntent(FirstRunService.java:49) 
      at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:212) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 
12-17 22:38:17.412 3076-3366/com.lstupenengo.primeraapp W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x41648d88) 
12-17 22:38:17.422 3076-3366/com.lstupenengo.primeraapp E/AndroidRuntime﹕ FATAL EXCEPTION: IntentService[Service] 
    Process: com.lstupenengo.primeraapp, PID: 3076 
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
      at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
      at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 
      at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 
      at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
      at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
      at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
      at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 
      at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 
      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 
      at com.lstupenengo.primeraapp.FirstRunService.uploadXX(FirstRunService.java:105) 
      at com.lstupenengo.primeraapp.FirstRunService.onHandleIntent(FirstRunService.java:49) 
      at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:212) 
      at android.os.HandlerThread.run(HandlerThread.java:61) 

Bildirim:

veritabanı dosyası yok veya kullanmayın
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.lstupenengo.primeraapp" > 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_SUPERUSER"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".FirstRunAlarm"/> 
     <service android:name=".FirstRunService"/> 
    </application> 


</manifest> 
+3

.. dosya oluşturulur alırsa denetleme veya varsa deneyin ve okuyabilmesi de tezahür eklendi tezahür –

+0

yılında WRITE_EXTERNAL_STORAGE PERMISSION eklemek Izinlerim var. Bir (dosya.exist) ve dosya var denedim. Başka fikirlerin var mı? –

+1

[this] 'a bakabilirsiniz (http://stackoverflow.com/questions/14373863/how-to-store-sqlite-database-directly-on-sdcard)? süper yöntem shud yol doğru şekilde başvuruyor diyor. –

cevap

2

İlk onay ister:

İşte

benim kodudur
File file = new File(myPath);  
if (file.exists() && !file.isDirectory()) 
+1

Satırı ekledim aynı hata geliyor. Dosya var, TRUE değerini döndürür –

2

Bir sınıf oluşturarak, ardından bu sınıfı doğrudan hizmetten çağırarak çözüldü. Sınıf

public class xxHandler extends SQLiteOpenHelper { 

    Context context; 
    SQLiteDatabase xxdb; 

    public wadbHandler(Context context1) { 
     super(context1,"xx.db", null, 1); 
     context = context1; 
    } 

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 

    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public void accion(SQLiteDatabase db){ 
     wadb = SQLiteDatabase.openDatabase(context.getFilesDir()+"/xx.db", null, 
       SQLiteDatabase.OPEN_READWRITE); 
     wadb.execSQL("SELECT * FROM table;") 

    } 
0

OpenDatabase önce ekleyin:

file.setWritable(true); 
İlgili konular