Database SQLite generato esternamente considerato sola lettura da SQLiteOpenHelper di Android

Ho un database SQLite che ho generato utilizzando il connettore JDBC SQLite trovato qui .

Ho poi copiato questo database sulla scheda SD del telefono Android e ho tentato di aprirlo utilizzando un SQLiteOpenHelper. Ho le seguenti eccezioni:

  • Qual è la chiave di protezione in Android?
  • Ricevere la notifica quando la scheda corrente viene nuovamente selezionata
  • Sostituire l'attività corrente
  • Oggi è il n ° giorno dell'anno
  • ImageView.setImageURI NON funziona quando si tenta di assegnare un R.drawable.X Uri
  • Impedire la notifica In attesa dell'inizio dell'iniziativa Attività già avviata?
  • ERROR/SQLiteOpenHelper(7373): android.database.sqlite.SQLiteException: attempt to write a readonly database: BEGIN EXCLUSIVE; ERROR/AndroidRuntime(7373): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /mnt/sdcard/4Trak/4Trak.db 

    Questo non ha alcun senso per me. Perché è un database di sola lettura? Sono stato in grado di scrivere per generarlo in primo luogo e ancora quando ho capito che avrei bisogno di una tabella android_metadata e l'ho aggiunto utilizzando un browser SQLite.

  • android.database.sqlite.SQLiteCantOpenDatabaseException: errore sconosciuto (codice 14): Imansible aprire database
  • Ricerca di file musicali con mediastore
  • Eccezione java.lang.NoClassDefFoundError: com.google.android.gms.common.AccountPicker
  • Ritardo di trasmissione ACTION_HEADSET_PLUG
  • Problema di Android NFC con i comandi APDU
  • Connessione JDBC in Android
  • 2 Solutions collect form web for “Database SQLite generato esternamente considerato sola lettura da SQLiteOpenHelper di Android”

    Sqlite apre solo database dalla directory del database delle applicazioni.

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

    Per leggere e scrivere il tuo database, la mia comprensione è che dovrai copiare il tuo database in questa posizione:

     InputStream myInput = myContext.getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); 

    Per eseguire questa copia, dovrai prima aprire un database alla destinazione finale del file di database:

     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

    Fathemes sapere se avete domande

    Questo mi è appena accaduto. Ho scritto un programma che è in 'produzione' e su un dispositivo e contiene dati in un DB SQLite.

    Ho eseguito il backup di questi dati sotto forma di istruzioni SQL (tramite aSQLiteManager). Sull'emulatore, ho ricreato questo db.

    Poi ho lanciato il mio programma che prevedeva un DB della versione 5. Il mio primo accesso del programma era attraverso getReadableDatabase in una sottoclass di SQLiteOpenHelper.

    E lì, ho ottenuto questa exception: non è ansible aggiornare un database di sola lettura dalla versione da 0 a 5.

    Lo ho risolto sostituendo la chiamata aperta da getWritableDatabase.

    Ora, diventa strano, perché l'assistente di SQLite chiamato onCreate, che conteneva le istruzioni di CREATE TABLE, mentre le tabelle erano già presenti, quindi ha provocato un altro errore. Ho dovuto commentare l'integer suCreate.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.