SQLite 自动增量主键字段不允许更新
SQLite autoincrement primary key fields dont allow update
我有一个包含列 "id INTEGER PRIMARY KEY AUTOINCREMENT" 的数据库 table。当我尝试使用主键更新此 table 的现有行时,应用程序退出并显示 "Unfortunately is stopped."
public int updateUser(User user) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRSTNAME, user.getUser_firstName()); // user first name
values.put(KEY_LASTNAME, user.getUser_lastName()); // user first name
values.put(KEY_USERNAME, user.getUsername());
values.put(KEY_PASSWORD, user.getPassword());
values.put(KEY_USERLEVEL, user.getUser_level());
values.put(KEY_DESIGNATION, user.getDesignation());
values.put(KEY_MOBILENO, user.getMobile_no());
values.put(KEY_EMAIL, user.getEmail());
values.put(KEY_NIC, user.getNIC());
values.put(KEY_GENDER, user.getGender());
values.put(KEY_DOB, user.getDOB());
values.put(KEY_AVAILABILITY, user.getAvailability());
db.close();
// updating row
return db.update(TABLE_USERS, values, KEY_ID + " = ?",
new String[] { String.valueOf(user.getUser_id()) });
Logcat :
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projectmanagementsys.com.sasith.project_management/com.projectmanagementsys.com.sasith.project_management.AddUser}: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.projectmanagementsys.com.sasith.project_management/databases/ProjectManagement
整个事情没有错误,当我评论更新查询时代码运行良好。有人可以提供解决方案吗?
谢谢。
您有行 db.close()
后跟 db.update()
并且您的错误表明您正试图打开一个已经关闭的对象。添加数据后您没有关闭数据库,您之前已经关闭了它。您需要更新该行,关闭数据库,然后 return 您的值。
// updating row
int result = db.update(TABLE_USERS, values, KEY_ID + " = ?",
new String[] { String.valueOf(user.getUser_id()) });
db.close();
return result;
我有一个包含列 "id INTEGER PRIMARY KEY AUTOINCREMENT" 的数据库 table。当我尝试使用主键更新此 table 的现有行时,应用程序退出并显示 "Unfortunately is stopped."
public int updateUser(User user) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRSTNAME, user.getUser_firstName()); // user first name
values.put(KEY_LASTNAME, user.getUser_lastName()); // user first name
values.put(KEY_USERNAME, user.getUsername());
values.put(KEY_PASSWORD, user.getPassword());
values.put(KEY_USERLEVEL, user.getUser_level());
values.put(KEY_DESIGNATION, user.getDesignation());
values.put(KEY_MOBILENO, user.getMobile_no());
values.put(KEY_EMAIL, user.getEmail());
values.put(KEY_NIC, user.getNIC());
values.put(KEY_GENDER, user.getGender());
values.put(KEY_DOB, user.getDOB());
values.put(KEY_AVAILABILITY, user.getAvailability());
db.close();
// updating row
return db.update(TABLE_USERS, values, KEY_ID + " = ?",
new String[] { String.valueOf(user.getUser_id()) });
Logcat :
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projectmanagementsys.com.sasith.project_management/com.projectmanagementsys.com.sasith.project_management.AddUser}: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.projectmanagementsys.com.sasith.project_management/databases/ProjectManagement
整个事情没有错误,当我评论更新查询时代码运行良好。有人可以提供解决方案吗? 谢谢。
您有行 db.close()
后跟 db.update()
并且您的错误表明您正试图打开一个已经关闭的对象。添加数据后您没有关闭数据库,您之前已经关闭了它。您需要更新该行,关闭数据库,然后 return 您的值。
// updating row
int result = db.update(TABLE_USERS, values, KEY_ID + " = ?",
new String[] { String.valueOf(user.getUser_id()) });
db.close();
return result;