我正面临着无法将新记录插入表中,而是覆盖了表中的第一条记录的挑战。
这发生在物理设备中,因为它在仿真器中工作正常。
以下是用于插入记录的代码:
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss", Locale.getDefault());
String strDate = formatter.format(date);
//SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING);
SQLiteDatabase db = this.getWritableDatabase();
/*ContentValues values = new ContentValues();
//values.put("UserId",1);
values.put("NoQPassed", scoreValues.get("NoPassed"));
values.put("NoQFailed", scoreValues.get("NoFailed"));
values.put("NoQSkipped", scoreValues.get("NoSkipped"));
values.put("SubjectName", scoreValues.get("strSubjectName"));
values.put("CompletedDateTime", strDate);
intRetVal= db.insert(score_Table_Name, null, values);*/
String strQuery="insert into "+score_Table_Name+" values ('"+strDate+"','"+scoreValues.get("NoPassed")+
"','"+scoreValues.get("NoFailed")+"','"+scoreValues.get("NoSkipped")+"','"+scoreValues.get("strSubjectName")+"')";
db.execSQL(strQuery);
db.close();
尝试使用 db.insert 和 db.executeSQL 进行插入,但没有帮助。有人可以帮我解决我的问题吗?
我没有添加任何主键或自动增量键来确保冲突不是由于该列。我们是否总是需要主键才能插入新记录?
答案 0 :(得分:0)
您可以使用下面的getCount()方法对出现的次数进行计数。 if getCount(name)== 0
然后插入。否则不插入并尝试登录。
public int getCount(String name) {
Cursor c = null;
try {
db = Dbhelper.getReadableDatabase();
String query = "select count(*) from TableName where name = ?";
c = db.rawQuery(query, new String[] {name});
if (c.moveToFirst()) {
return c.getInt(0);
}
return 0;
}
finally {
if (c != null) {
c.close();
}
if (db != null) {
db.close();
}
}
}
但是,如果您说要覆盖它,则此逻辑可能无效。我认为在该Android sqlite中没有替代方法。请检查在插入新记录之前您可能会在任何地方删除数据库。似乎是覆盖数据