【发布时间】:2012-07-26 21:17:59
【问题描述】:
好的,所以我的 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) 并且工作正常。问题是即使数据库存在,它也被我的资产文件夹中的数据库文件覆盖。感谢您的回复,不管
【问题讨论】:
-
您的数据库
myDataBase是否已以写入权限打开?该示例似乎正在打开一个只读实例。 -
是的,这里是openDataBase方法中的代码:myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
-
作为一种解决方法,您是否尝试过创建自己的数据库并将数据从提供的数据库复制到您创建的数据库中?
-
@user1552404 不幸的是,我没有太多 Android 经验,只有 Java 和数据库经验。我觉得您正在遵循的教程通过复制文件数据本身来复制数据库,这是一种非常奇怪的方式。我建议您获取一个新数据库 (this.getWritableDatabase()),为其分配正确的架构,然后尝试通过 SQL 复制值。
标签: android database sqlite insert