SQLite returned an error code of 14

40,071

Solution 1

I have seen this error occur if you are using sharedUserId in your manifest. If you change the sharedUserId of an application and reinstall the application it does not have the required ownership to write to the SQLite database.

Solution 2

This may be a little late, but hope this helps for whoever gets this problem (since I can't find a definitive solution around).

I think I know the reason for this cause (at least for my case). Looking in the DDMS --> File Explorer, you'd realize that the Database Folder (/data/data//databases/) does not exist, which is why the application cannot create the database file in that non-existent folder. If you can create a databases folder in some manner, you can avoid this problem.

Because I'm lazy, I just used the /data/data//files/ folder when I'm in Emulator mode. You can get the files dir using this:

context.getFilesDir().getPath()

This worked beautifully for me in the Emulator.

Hope this helps someone.

In case you want to see some code:

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);
}

EDIT: I tried logging into Facebook (my app has FB integration) on the Emulator and /databases folder appeared after that (and persisted). Not sure what happened, but it's possible to create that folder somehow. Something for another expert around here to shed light on.

Solution 3

Today this issue cost me 3 hours. What I tried:

  • Rewriting the copy database code.
  • Deleting the app from the emulator / device
  • Wiping emulator(s)
  • Cleaning eclipse
  • Changing file permissions

I solved the problem by copying the code from a shared Dropbox account to another location and refactoring the code in the Android Manifest and java files with another package name.

The application runs beautifully now.

Solution 4

I had the same problem.

What solved it, was replacing

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

with

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

Solution 5

Or, another easy solution that worked for me is as follows :

  1. In emulator's settings option, click Application
  2. Go to Manage Applications
  3. Find your App, and click Uninstall
  4. Then run your App again from the Eclipse.
Share:
40,071

Related videos on Youtube

Kishore
Author by

Kishore

Updated on July 09, 2022

Comments

  • Kishore
    Kishore almost 2 years

    I am trying to copy an existing database from my assets folder and execute some operations on it. Everything is working fine but I've gotten the following error in the log files of my emulator:

    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.dharani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72)
    09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47)
    09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Database.DataBaseHelper.Login(DataBaseHelper.java:166)
    09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.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.NativeStart.main(Native Method)
    

    Any suggestions on how to solve this problem?

    • Caner
      Caner over 12 years
      Are you sure you have the file "/data/data/com.dhani.Lazy/databases/LazyDB.sqlite"?
    • Kishore
      Kishore over 12 years
      @LAS_VEGAS yes, have the file at "/data/data/com.dhani.Lazy/databases/LazyDB.sqlite" and i can also execute SQLite Queries on it. everything thing is working but in log the above error shows up.
  • Kishore
    Kishore over 12 years
    this is my manifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="schemas.android.com/apk/res/android" package="com.dhani.Lazy" android:versionCode="1" android:versionName="1.0"><application -----><activity ----/></application>
  • PearsonArtPhoto
    PearsonArtPhoto over 10 years
    Sounds like you could have saved some time by simply doing a clean.
  • saber tabatabaee yazdi
    saber tabatabaee yazdi almost 10 years
    i have same logcat ... check your db name doesn't have caps characters in his string
  • saber tabatabaee yazdi
    saber tabatabaee yazdi almost 10 years
    ok ... which way to for uninstall and install every execution debug mode?
  • saber tabatabaee yazdi
    saber tabatabaee yazdi almost 10 years
    i rename my db that has CAPS char in first letter? and resolved.. this is true?
  • gdbj
    gdbj almost 9 years
    My db is in "/data/data/YOUR_PACKAGE/files/". Does it have to be in a "databases" subfolder?
  • SteBra
    SteBra almost 9 years
    Yes, put it in 'databases' folder
  • gdbj
    gdbj almost 9 years
    I finally got mine to work. wanted to circle back that it works fine in the "files" subfolder.