写入预先存在的SQLite数据库Android

时间:2012-07-25 17:48:48

标签: android database sqlite insert

好的,所以我的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语句读取(!dbExist),更改为if(dbExist)并且工作正常。问题是,即使数据库存在,它也被我的assets文件夹中的数据库文件覆盖。感谢您的回复,无论

1 个答案:

答案 0 :(得分:1)

正如mhradek所说,您的SQLite DataBaseHelper类似乎在此处使用 READONLY 权限打开数据库:

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

您可能希望尝试使用READ和WRITE权限打开数据库,将 OPEN_READONLY 标志更改为 OPEN_READWRITE 。这将产生以下代码:

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

Google的Android文档解释了这里的两个标志Android OPEN_READONLY Flag

这可以解释为什么按钮单击似乎是在添加数据,但数据库不会永久更改,因为如果以这种方式打开它就无法写入。

如果更改旗帜适合您,请告诉我。

干杯!