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

写入预先存在的SQLite数据库Android,android,database,sqlite,insert,Android,Database,Sqlite,Insert,好的,我的android应用程序使用了一个预先存在的数据库,我使用这个数据库访问它 现在我从数据库中读取数据没有问题,但似乎无法添加数据。问题是数据库文件从未更新,只有我当时运行的数据库实例。我需要对数据库所做的更改是永久性的,因此我尝试序列化数据库实例,但发现无法完成。我认为在我添加到数据库实例之后,我需要将其导出到一个文件,并用它覆盖数据库文件。我不知道我会怎么做,我已经阅读了上面网站的每一条评论,也浏览了无数的帖子 我可能错了,但这是我能想象得到的唯一方法 public void add

好的,我的android应用程序使用了一个预先存在的数据库,我使用这个数据库访问它

现在我从数据库中读取数据没有问题,但似乎无法添加数据。问题是数据库文件从未更新,只有我当时运行的数据库实例。我需要对数据库所做的更改是永久性的,因此我尝试序列化数据库实例,但发现无法完成。我认为在我添加到数据库实例之后,我需要将其导出到一个文件,并用它覆盖数据库文件。我不知道我会怎么做,我已经阅读了上面网站的每一条评论,也浏览了无数的帖子

我可能错了,但这是我能想象得到的唯一方法

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


 }
public void addTenantWithoutProperty(字符串名称、字符串电子邮件、字符串电话){
//这个方法从我的数据库中读取数据
ArrayList租户=(ArrayList)getAllTenants();
//在尝试添加到数据库之前检查数据库中的数据
对于(int i=0;i
单击一个按钮就会调用它,输出显示正在添加数据,但不会导致数据库中的永久性更改。我怎样才能避开这件事?任何帮助都将不胜感激

编辑:已解决! createDataBase()中的if语句读取if(!dbExist),改为if(dbExist)并正常工作。问题是,即使数据库存在,它也会被“我的资产”文件夹中的数据库文件覆盖。感谢您的回复

如前所述,您的SQLite DataBaseHelper类似乎正在以只读权限打开数据库:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
您可能希望尝试使用读写权限打开数据库,将打开\u只读标志更改为打开\u读写。这将导致以下代码:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
谷歌的Android文档在这里解释了这两个标志

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

如果更改国旗对您有效,请告诉我


干杯

您的数据库
myDataBase
是否已以写入权限打开?该示例似乎正在打开一个只读实例。是的,以下是openDataBase方法中的代码:myDataBase=SQLiteDatabase.openDataBase(myPath,null,SQLiteDatabase.OPEN_READWRITE);作为一种解决方法,您是否尝试过创建自己的数据库,并将提供的数据复制到您创建的数据库中?@user1552404不幸的是,我没有太多Android经验,只有Java和数据库经验。我觉得您正在学习的教程以一种非常奇怪的方式复制数据库,即复制文件数据本身。我建议您获取一个新数据库(this.getWritableDatabase()),为其分配适当的架构,并尝试通过SQL复制值。请遵循以下示例代码:Nope my code读作:checkDB=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);,我通读了整件事,改变了所有只有我能找到的读物。