简体   繁体   English

android中的sqlite3_open错误

[英]sqlite3_open error in android

          public class DataBaseHelper extends SQLiteOpenHelper
          {
              private static String DB_NAME;
              private static String DB_PATH = "/data/data/com.muthu.tamil/databases/";
              private final Context myContext;
              private SQLiteDatabase myDataBase;

             static
              {
                  DB_NAME = "aathichudi.db";
              }

  public DataBaseHelper(Context paramContext)
  {
    super(paramContext, DB_NAME, null, 1);
    DB_PATH = "/data/data/" + paramContext.getPackageName() + "/databases/";
    this.myContext = paramContext;
  }

  private boolean checkDataBase()
  {
    return new File(DB_PATH + DB_NAME).exists();
  }

  private void copyDataBase()
    throws IOException
  {
    InputStream localInputStream = this.myContext.getAssets().open(DB_NAME);
    FileOutputStream localFileOutputStream = new FileOutputStream(DB_PATH + DB_NAME);
    byte[] arrayOfByte = new byte[1024];
    while (true)
    {
      int i = localInputStream.read(arrayOfByte);
      if (i <= 0)
      {
        localFileOutputStream.flush();
        localFileOutputStream.close();
        localInputStream.close();
        return;
      }
      localFileOutputStream.write(arrayOfByte, 0, i);
    }
  }




  public void createDataBase()
    throws IOException
  {
    if (checkDataBase())
      new File(DB_PATH + DB_NAME).delete();
    getReadableDatabase();
    close();
    try
    {
      copyDataBase();
      return;
    }
    catch (IOException localIOException)
    {
    }
    throw new Error("Error copying database");
  }

  public Cursor getData(String paramString)
  {
    return this.myDataBase.rawQuery(paramString, null);
  }

  public void onCreate(SQLiteDatabase paramSQLiteDatabase)
  {
  }

  public void onUpgrade(SQLiteDatabase paramSQLiteDatabase, int paramInt1, int paramInt2)
  {
  }

  public void openDataBase()
    throws SQLException
  {
    this.myDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, 1);
  }

i write code for db connection in android but i get ERROE like this: 我在android中编写db连接的代码,但是我得到了这样的ERROE:

sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL) failed sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL) failed sqlite returned: error code = 14, msg = cannot open file at source line 25467 sqlite3_open_v2("/data/data//data/data/com.muthu.tamil/files/databases/aathichudi.db", &handle, 1, NULL) failed Shutting down VM threadid=1: thread exiting with uncaught exception (group=0x4001d800) FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.muthu.tamil/com.muthu.tamil.HomeActivity}: android.database.sqlite.SQLiteException: unable to open database file at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMes sqlite3_open_v2(“/ data / data / com.muthu,tamil / databases / aathichudi.db”,&handle,1,NULL)sqlite3_open_v2失败(“/ data / data / com.muthu,tamil / databases / aathichudi.db”,&handle ,1,NULL)sqlite返回失败:错误代码= 14,msg =无法在源行25467打开文件sqlite3_open_v2(“/ data / data // data / data / com.muthu.tamil / files / databases / aathichudi.db” ,&handle,1,NULL)失败关闭VM threadid = 1:线程退出时未捕获异常(组= 0x4001d800)致命异常:主java.lang.RuntimeException:无法启动活动ComponentInfo {com.muthu.tamil / com.muthu .tamil.HomeActivity}:android.database.sqlite.SQLiteException:无法在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)上打开数据库文件Android.app.Handler.dispatchMes上的android.app.ActivityThread.access $ 2300(ActivityThread.java:125)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) sage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) Caused by: android.database.sqlite.SQLiteException: unable to open database file at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1812) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) at com.muthu.tamil.sql.DataBaseHelper.openDataBase(DataBaseHelper.java:112) at com.muthu.tamil.HomeActivity.onCreate(HomeActivity.java:41) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(Activi sage(Handler.java:99)在android.app.Looper.loop(Looper.java:123)的android.app.ActivityThread.main(ActivityThread.java:4627)java.lang.reflect.Method.invokeNative(Native)方法)在com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)的java.lang.reflect.Method.invoke(Method.java:521)中.main(ZygoteInit.java:626)at dalvik.system.NativeStart.main(Native Method)引起:android.database.sqlite.SQLiteException:无法在android.database.sqlite.SQLiteDatabase.dbopen中打开数据库文件(本机方法) )在android.database.sqlite.SQLiteDatabase。(SQLiteDatabase.java:1812)的android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)at com.muthu.tamil.sql.DataBaseHelper.openDataBase(DataBaseHelper.java) :112)在android.app.ActivityThread.performLaunchActivity(Activi)的android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)的com.muthu.tamil.HomeActivity.onCreate(HomeActivity.java:41) tyThread.java:2627) ... 11 more tyThread.java:2627)......还有11个

sqlite3_open_v2("/data/data/com.muthu,tamil/databases/aathichudi.db", &handle, 1, NULL)
failed sqlite returned: error code = 14, msg = cannot open file at source line 25467 

This error is produced only when your database is not created in the emulator or the device. 仅当您未在模拟器或设备中创建数据库时,才会生成此错误。 You can check whether your database is created in your IDE DDMS/file_explorer (/data/data/Ur_pkg_name/databases/ur_db_name). 您可以检查是否在IDE DDMS / file_explorer(/ data / data / Ur_pkg_name / databases / ur_db_name)中创建了数据库。

There was a bug reported related to this problem: http://code.google.com/p/android/issues/detail?id=949 报告中存在与此问题相关的错误: http//code.google.com/p/android/issues/detail?id = 949

I have come across with several solutions/workarounds people came up with including the followings: 我遇到过几个人提出的解决方案/解决方法,包括以下内容:

If you are using sharedUserId in your Manifest file changing the sharedUserId of an application and re-installing the application could work since it does not have the required ownership to write to the SQLite database. 如果在Manifest文件中使用sharedUserId,则更改应用程序的sharedUserId并重新安装应用程序可能会起作用,因为它没有写入SQLite数据库所需的所有权。

Editing the manifest file can eliminate the mistake again. 编辑清单文件可以再次消除错误。 Inside the manifest, make sure that you've entered the correct min sdk version. 在清单中,确保您输入了正确的min sdk版本。 You could make sure your min SDK version is OK by checking manifest file if there is an exclamation indicator across the left column from the code telling me of your mistake. 您可以通过检查清单文件来确保您的min SDK版本是否正常,如果代码左侧列中有一个感叹号指示器告诉我您的错误。

I hope one of these solutions work for you too. 我希望其中一个解决方案也适合你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM