0

さて、私のAndroidアプリは既存のデータベースを利用します。これを使用してアクセスします

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

データベースからのデータの読み取りに問題はありませんが、データを追加できないようです。問題は、データベース ファイルが更新されず、その時点で実行しているデータベースのインスタンスのみが更新されることです。データベースに加えた変更を永続的にする必要があるため、データベースのインスタンスをシリアル化しようとしましたが、実行できないことがわかりました。データベースのインスタンスに追加した後、これをファイルにエクスポートして、データベース ファイルを上書きする必要があると思います。上記のサイトのすべてのコメントを読んで、ここでも数え切れないほどの投稿を行ったので、どうすればよいかわかりません。

私は間違っているかもしれませんが、それが私が想像できる唯一の方法です。

public void addTenantWithoutProperty(String name, String email, String phone){

    //This method reads from my database
ArrayList<Tenants> tenants = (ArrayList<Tenants>) getAllTenants();

//Checks data in the database before I try add to it
for(int i = 0;i < tenants.size();i++){
 String name;
 name = tenants.get(i).getName();

 System.out.println(i + " before " + names);
}

//I have also tried adding to it using ContentValues, but it makes no difference
String tenantsql = "INSERT INTO tenants (name, phone, email) VALUES ('" + name + "','"        
+ phone + "','" +  email + "')";


myDataBase.execSQL(tenantsql);


tenants = (ArrayList<Tenants>) getAllTenants();



 //checks data in database after insertion 
 for(int i = 0;i < tenants.size();i++){
     String names;
     names = tenants.get(i).getName();

     System.out.println(i + " after " + names);
 }


 }

これはボタンのクリックで呼び出され、出力にはデータが追加されていることが示されますが、データベースが永続的に変更されることはありません。どうすればこれを回避できますか? どんな助けでも大歓迎です

編集:解決しました!createDataBase() の if ステートメントは、if(!dbExist) を読み取り、if(dbExist) に変更され、正常に動作します。問題は、データベースが存在する場合でも、資産フォルダー内のデータベース ファイルによって上書きされていたことです。にもかかわらず、あなたの応答をありがとう

4

1 に答える 1

1

mhradek言ったように、SQLite DataBaseHelper クラスは、ここでREADONLY権限でデータベースを開いているようです:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

OPEN_READONLYフラグをOPEN_READWRITEに変更して、READ および WRITE パーミッションでデータベースを開こうとする場合があります。これにより、次のコードが生成されます。

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

Google の Android ドキュメントでは、ここで 2 つのフラグについて説明していますAndroid OPEN_READONLY フラグ

これは、ボタンのクリックがデータを追加しているように見える理由を説明するかもしれませんが、そのように開いた場合、データベースに書き込むことができないため、データベースは永続的に変更されません.

フラグの変更がうまくいくかどうか教えてください。

乾杯!

于 2012-07-25T18:03:30.157 に答える