Android无法写入数据库

Android无法写入数据库,android,database,sqlite,Android,Database,Sqlite,我对android应用程序与SQLite数据库的连接有问题。我在资产文件夹中有一个SQLite数据库实例。”“选择”操作返回手动插入数据库的数据。但是,写入操作(插入、更新、删除)失败。我使用了'this.getReadableDatabase()'并替换为'this.getWriteableDatabase',类似地, openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY)已替换为SQLiteDatabase.openDatabase(

我对android应用程序与SQLite数据库的连接有问题。我在资产文件夹中有一个SQLite数据库实例。”“选择”操作返回手动插入数据库的数据。但是,写入操作(插入、更新、删除)失败。我使用了'this.getReadableDatabase()'并替换为'this.getWriteableDatabase',类似地, openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY)已替换为SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READWRITE),但仍然没有任何用处。我正在测试2.3.6版本的三星Galaxy S I-90003。有人请帮帮我

    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
   // values.put(KEY_ID,contact.getId());//Contact Id
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_IMAGE, contact.getImage()); // Contact Phone
    // Inserting Row
    try {
        if(isTableExists(TABLE_IMAGES,true)) {
            db.insert(TABLE_IMAGES, null, values);
        }
    }catch (Exception e) {
        System.out.println("Error inserting:"+e.getMessage());
    }
    db.close(); // Closing database connection

   public boolean isTableExists(String tableName, boolean openDb) {
    if(openDb) {
        if(db == null || !db.isOpen()) {
            db = getWritableDatabase();
        }
        if(!db.isReadOnly()) {
            db.close();
            db = getWritableDatabase();
        }
    }
    Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master  where tbl_name = '"+tableName+"'", null);
    if(cursor!=null) {
        if(cursor.getCount()>0) {
            cursor.close();
            return true;
        }
        cursor.close();
    }
    return false;
}

问题似乎与数据库的写入权限有关。 Android为您提供了这2种方法来管理新数据库的创建和升级

public class MyDBHandler extends SQLiteOpenHelper {

    @Override
    public void onCreate(SQLiteDatabase arg0) {
        //add here the sql code to create the database

    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // everytime you need to change the database place your sql code here

    }
}
您应该按照本教程了解如何更正它

我会再次检查您是否使用了
getWritableDatabase
方法。是否有异常?使用try-catch块?有一个异常显示为“游标未关闭”。它指向字符串myPath=DB\u PATH+DATABASE\u NAME;db=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READWRITE);你在哪里运行这个代码?在主线上?在单独的线程上?@AndreaDeGaetano:您的输入很有用。我正在写入的数据库位于/data/data//databases/文件夹中。我尝试通过DDMS打开此文件夹,但无法访问。因此,我认为权限受到限制。我如何解决这个问题?您认为有必要为我目前正在使用的设备设置根目录吗?这是解决我问题的办法吗?pls@Kittu我认为这不是正确的方法。或者,您可以在第一次(或者每次您发现数据库不可用时)复制数据库,并将其复制到一个可以进行写入的位置。例如,您可以在外部存储器上进行复制(具有正确的权限)。。。但请记住,如果它是一个共享文件夹,则每个应用程序都可以主动从中读取。感谢您提供的解决方案。外部存储指的是安装在手机上的SD卡?此:。顺便说一句,这不是正确的解决方案。。但这取决于您想要实现的目标:)我的目的是将图像(数据路径/字节数组)保存到数据库中。此数据库特定于我的应用程序。所以,我使用SQlite并尝试插入图像的字节数组形式。我计划将此数据库保存在资产文件夹中。这是正确的方法吗?