2017-09-09 21 views
0

新しいAndroidアプリでSqlite3データベースを開くことができません。問題を特定するために、私は新しいアプリを作りました。私は、メインの下のAssetsフォルダにsqlite3 dbを配置しました。マニフェストに Androidでsqliteデータベースを開くことができません

は、私は、次の行を配置:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

私はこのテストアプリでただ一つの活性を有し、これはその活性のコードです。それはちょうど1つのことをします:attempts to open the db

09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1] 
09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) os_unix.c:31278: (2) open(/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3) - 
09-09 20:10:54.788 9850-9850/? E/SQLiteDatabase: Failed to open database '/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3'. 
               android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 

それはgetDatabasePathから有効なパスを取得しているようだ:それはすぐに死に、コンソールにエラーを出力します(下記詳細)ここで

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Context context = getApplicationContext(); 
     String db_path = String.valueOf(context.getDatabasePath("production.sqlite3")); 

     SQLiteDatabase db = SQLiteDatabase.openDatabase(db_path, null, SQLiteDatabase.OPEN_READWRITE); 

    } 
} 

は、ログから該当するエラーですファイルが存在しないと言っているようです。

+0

ファイルが存在しますが、不正な形式です... 'ができないファイルを開いてline'で...それは暗号化されていますか? –

+0

このライブラリを試しましたか? https://github.com/jgilfelt/android-sqlite-asset-helper –

+0

いいえ、暗号化されていません。確かに、私は実際に別のプロジェクトで積極的に使用するファイルのコピーを使用しました。つまり、コピーペーストを使用してIDEのアセットフォルダに入れ、ネイティブファイルシステム内で移動させました。私がそれをしたとき、私はUTF-8ファイルではないというメッセージを得ました。これはテキストではないので驚くべきことではありません。しかし、ファイルを資産に移動するより良い方法はありますか? – hawmack13

答えて

1

ログを読むとパスが取得されますが、データベースを明示的にアプリケーションのプライベートデータフォルダにコピーしない限り、そのファイルを開くことはできません。

アセットは読み取り専用であるため、データベースを開くことができたとしても、SELECT文を使用することができます。

は参照してください:Reading sqlite file from asset folder

関連する問題