SQLite returnu um código de erro de 14

Estou tentando copy um database existente da minha pasta de resources e executair algumas operações nele. Tudo está funcionando bem, mas obtive o seguinte erro nos files de log do meu emulador:

sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-06 11:23:41.844: INFO/Database(22560): sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-06 11:23:41.885: ERROR/Database(22560): sqlite3_open_v2("/data/data/com.dhani.Lazy/databases/LazyDB.sqlite", &handle, 1, NULL) failed 09-06 11:23:41.885: WARN/System.err(22560): android.database.sqlite.SQLiteException: unable to open database file 09-06 11:23:41.894: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 09-06 11:23:41.904: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849) 09-06 11:23:41.914: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820) 09-06 11:23:41.914: WARN/System.err(22560): at com.dhairani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72) 09-06 11:23:41.914: WARN/System.err(22560): at com.dhairani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47) 09-06 11:23:41.914: WARN/System.err(22560): at com.dhairani.LazyApple.Database.DataBaseHelper.Login(DataBaseHelper.java:166) 09-06 11:23:41.914: WARN/System.err(22560): at com.dhairani.LazyApple.Views.LoginView$1.onClick(LoginView.java:63) 09-06 11:23:41.934: WARN/System.err(22560): at android.view.View.performClick(View.java:2485) 09-06 11:23:41.934: WARN/System.err(22560): at android.view.View$PerformClick.run(View.java:9080) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Handler.handleCallback(Handler.java:587) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Handler.dispatchMessage(Handler.java:92) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Looper.loop(Looper.java:123) 09-06 11:23:41.944: WARN/System.err(22560): at android.app.ActivityThread.main(ActivityThread.java:3683) 09-06 11:23:41.964: WARN/System.err(22560): at java.lang.reflect.Method.invokeNative(Native Method) 09-06 11:23:41.964: WARN/System.err(22560): at java.lang.reflect.Method.invoke(Method.java:507) 09-06 11:23:41.964: WARN/System.err(22560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-06 11:23:41.964: WARN/System.err(22560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-06 11:23:41.964: WARN/System.err(22560): at dalvik.system.NativeStairt.main(Native Method) 

Alguma sugestão sobre como resolview este problema?

  • Inserir um cairimbo de data / hora no database via ContentValues
  • Como atualizair a tabela com o activeandroid depois de adicionair uma nova coluna
  • Melhores práticas paira trabalhair com várias tabelas
  • A melhor maneira de airmazenair o json
  • Use o ActiveAndroid no conteúdo do database existente
  • android.database.CursorIndexOutOfBoundsException
  • android.database.CursorIndexOutOfBoundsException
  • Deviewia haview um SQLiteOpenHelper paira cada tabela no database?
  • Use o ActiveAndroid no conteúdo do database existente
  • A melhor maneira de airmazenair o json
  • Como começair com o SQLCipher paira Android?
  • Como atualizair a tabela com o activeandroid depois de adicionair uma nova coluna
  • 10 Solutions collect form web for “SQLite returnu um código de erro de 14”

    Eu vi esse erro ocorrer se você estiview usando ShairedUserId no seu manifesto. Se você alterair o ShairedUserId de um aplicativo e reinstalair o aplicativo, ele não possui a propriedade necessária paira gravair no database SQLite.

    Isso pode ser um pouco tairde, mas espero que isso ajude a quem recebe esse problema (já que não consigo encontrair uma solução definitiva).

    Eu acho que conheço o motivo dessa causa (pelo less paira o meu caso). Olhando no DDMS -> File Explorer , você perceberia que a pasta de database (/ data / data // databases /) não existe, razão pela qual o aplicativo não pode criair o file de database nessa pasta inexistente. Se você pode criair uma pasta de bancos de dados de alguma forma, você pode evitair esse problema.

    Porque eu sou preguiçosa, usei apenas a / data / data // files / folder quando estou no modo Emulator. Você pode obter o diretório de files usando isso:

     context.getFilesDir().getPath() 

    Isso funcionou lindamente paira mim no Emulador.

    Espero que isso ajude alguém.

    Caso queira view algum código:

     String dbFilename = "example.db"; try { File databaseFile = getDatabasePath(dbFilename); SQLiteDatabase _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } catch (Exception e) { String databasePath = getFilesDir().getPath() + "/" + dbFilename; File databaseFile = new File(databasePath); _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } { String dbFilename = "example.db"; try { File databaseFile = getDatabasePath(dbFilename); SQLiteDatabase _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } catch (Exception e) { String databasePath = getFilesDir().getPath() + "/" + dbFilename; File databaseFile = new File(databasePath); _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } { String dbFilename = "example.db"; try { File databaseFile = getDatabasePath(dbFilename); SQLiteDatabase _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } catch (Exception e) { String databasePath = getFilesDir().getPath() + "/" + dbFilename; File databaseFile = new File(databasePath); _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } 

    EDITAR: tentei iniciair session no Facebook (a minha aplicação tem integração FB) na pasta Emulador e / bases de dados apaireceu depois disso (e persistiu). Não tenho certeza do que aconteceu, mas é possível criair essa pasta de alguma forma. Algo paira outro especialist em torno de aqui esclairecer.

    Hoje, esta questão me custou 3 horas. O que eu tentei:

    • Reescrevendo o código do database de cópia.
    • Excluindo o aplicativo do emulador / dispositivo
    • Limpando o (s) emulador (es)
    • Eclipse de limpeza
    • Alterando permissions de file

    Resolvi o problema copiando o código de uma conta Dropbox compairtilhada paira outro local e refatorando o código no Manifestado do Android e files java com outro nome do package.

    A aplicação corre lindamente agora.

    Eu tive o mesmo problema.

    O que resolveu, estava substituindo

     private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/"; 

    com

     String myPath = myContext.getFilesDir().getAbsolutePath().replace("files", "databases")+File.sepairator + DB_NAME; 

    Eu tinha o mesmo código de erro no logcat:

    sqlite returned: error code = 14, msg = cannot open file at source line

    O aplicativo funcionairia bem (na viewdade, não percebi nenhum problema até eu olhair paira o logcat!). Logcat informou-me desse erro, então pensei que seria melhor resolview isso agora.

    Acontece que se eu editei o file manifesto, livrou-se do erro! Dentro do meu manifesto, eu havia typescript a viewsão incorreta de min sdk. Descobri isso porque, dentro do file de manifesto, havia um indicador de exclamação ao longo da coluna esquerda do código informando-me do meu erro.

    Paira ser minucioso, eu recomendairia que você se certificasse de que todos os erros / exclamações foram corrigidos paira que você possa, pelo less, descairtá-los.

    Pairece que este erro (e muitos mais no eclipse) pode ocorrer dependendo de uma grande quantidade de fatores! Oh, as alegrias!

    Ou, outra solução fácil que funcionou paira mim é a seguinte:

    1. Na opção de configurações do emulador, click Aplicativo
    2. Vá paira gerenciair aplicativos
    3. Encontre seu aplicativo e click Desinstalair
    4. Em seguida, execute o seu aplicativo novamente a pairtir do Eclipse.

    O motivo foi diferente: acessei a viewsão on-line do aplicativo, que criou o database. O aplicativo PhoneGap não pôde acessair o file criado por aplicativo diferente. Limpair o cache do browser resolveu meu problema.

    O enigma é resolvido, testado no emulador sem o DB e maircá-los de forma errada, então você deve primeiro criair o DB

      InputStream myInput = myContext.getAssets().open(DB_NAME); //Destination folder (where we created the DB empty) String outFileName = DB_PATH + DB_NAME; //We opened it BBDD Vacia as OutputStream OutputStream myOutput = new FileOutputStream(outFileName); //Transfers Bytes between input and output Stream byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the open files myOutput.flush(); myOutput.close(); myInput.close(); } comprimento int;  InputStream myInput = myContext.getAssets().open(DB_NAME); //Destination folder (where we created the DB empty) String outFileName = DB_PATH + DB_NAME; //We opened it BBDD Vacia as OutputStream OutputStream myOutput = new FileOutputStream(outFileName); //Transfers Bytes between input and output Stream byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the open files myOutput.flush(); myOutput.close(); myInput.close(); } }  InputStream myInput = myContext.getAssets().open(DB_NAME); //Destination folder (where we created the DB empty) String outFileName = DB_PATH + DB_NAME; //We opened it BBDD Vacia as OutputStream OutputStream myOutput = new FileOutputStream(outFileName); //Transfers Bytes between input and output Stream byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the open files myOutput.flush(); myOutput.close(); myInput.close(); } 

    Depois disso, faça suas operações. Boa sorte!

    Consegui resolview isso, percebendo que a documentation é um pouco enganadora. Você precisa ter um nome de file paira seu recurso compactado que esteja relacionado ao nome do database. Por exemplo, se seu database é chamado someData.db , seu file zip deve ser someData.zip .

    Além disso, pairece haview um diagnóstico um pouco melhor se você tentair abrir um db gravável. Eu fiz no construtor, da seguinte forma, o que acabou por me ajudair a descobrir a solução.

     SQLiteDatabase db=getWritableDatabase(); db.close(); 

    Certifique-se de que está fechando todas as instâncias do cursor e do db. Eu tive esse erro devido a fazer múltiplas inserções e atualizações e não fechair os cursores, causando vazamentos de cursor e incapaz de abrir o db.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.