Android无法写入数据库
我对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。有人请帮帮我Android无法写入数据库,android,database,sqlite,Android,Database,Sqlite,我对android应用程序与SQLite数据库的连接有问题。我在资产文件夹中有一个SQLite数据库实例。”“选择”操作返回手动插入数据库的数据。但是,写入操作(插入、更新、删除)失败。我使用了'this.getReadableDatabase()'并替换为'this.getWriteableDatabase',类似地, openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY)已替换为SQLiteDatabase.openDatabase(
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并尝试插入图像的字节数组形式。我计划将此数据库保存在资产文件夹中。这是正确的方法吗?