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

私はアンドロイドでdb接続のコードを書きますが、私はこのようなERROEを取得します:

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 / database / aathichudi.db" 、&​​handle、1、NULL)失敗VMのシャットダウンthreadid = 1:キャッチされない例外でスレッドが終了します(group = 0x4001d800)致命的な例外:メインjava.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.muthu.tamil / com.muthu .tamil.HomeActivity}:android.database.sqlite.SQLiteException:android.app.ActivityThreadのandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)でデータベースファイルを開くことができません。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.dispatchMessage( 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(ネイティブメソッド)原因:android.database.sqlite.SQLiteException:android.database.sqlite.SQLiteDatabaseでデータベースファイルを開くことができません。android.database.sqlite.SQLiteDatabase。(SQLiteDatabase.java:1812)のdbopen(ネイティブメソッド)android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)の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(ActivityThread。 java:2627)...11詳細Instrumentation.callActivityOnCreate(Instrumentation.java:1047)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)...11詳細Instrumentation.callActivityOnCreate(Instrumentation.java:1047)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)...11詳細

4

1 に答える 1

2
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 

このエラーは、データベースがエミュレーターまたはデバイスで作成されていない場合にのみ発生します。データベースがIDEDDMS/ file_explorer(/ data / data / Ur_pkg_name / databases / ur_db_name)で作成されているかどうかを確認できます。

この問題に関連して報告されたバグがありました:http ://code.google.com/p/android/issues/detail?id = 949

私は人々が以下を含むいくつかの解決策/回避策を思いついたのに出くわしました:

マニフェストファイルでsharedUserIdを使用している場合、SQLiteデータベースに書き込むために必要な所有権がないため、アプリケーションのsharedUserIdを変更してアプリケーションを再インストールすると機能する可能性があります。

マニフェストファイルを編集すると、間違いを再びなくすことができます。マニフェスト内で、正しいminsdkバージョンを入力したことを確認してください。間違いを知らせるコードの左側の列に感嘆符が表示されている場合は、マニフェストファイルをチェックして、最小SDKバージョンに問題がないことを確認できます。

これらのソリューションの1つがあなたにも役立つことを願っています。

于 2012-08-17T07:29:56.130 に答える