我从本教程中设置了一个 SQLite 数据库,将其更改为我自己的项目:http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/
但是教程没有提到如何更新字段。我试过这个:
db = new NotesDatabaseHandler(ViewNoteActivity.this);
...
db.updateNote(new Note(identifier, editTextTitle.getText().toString(), editTextContent.getText().toString(), "Updated on: " + printStandardDate()));
虽然运气不好..我运行应用程序,但笔记不会更新。
笔记类:
package com.timmo.notes;
class Note {
//private variables
private int _id;
private String _title;
private String _content;
private String _metadata;
// Empty constructor
public Note() {
}
// constructor
public Note(int id, String title, String content, String metadata) {
this._id = id;
this._title = title;
this._content = content;
this._metadata = metadata;
}
public int getID() {
return this._id;
}
public void setID(int id) {
this._id = id;
}
public String getTitle() {
return this._title;
}
public void setTitle(String title) {
this._title = title;
}
public String getContent() {
return this._content;
}
public void setContent(String content) {
this._content = content;
}
public String getMetadata() {
return this._metadata;
}
public void setMetadata(String metadata) {
this._metadata = metadata;
}
}
来自 NotesDatabaseHandler():
// Updating single note
public int updateNote(Note note) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TITLE, note.getTitle());
values.put(KEY_CONTENT, note.getContent());
values.put(KEY_METADATA, note.getMetadata());
// updating row
int ret = db.update(TABLE_NOTES, values, KEY_ID + " = ?",
new String[]{String.valueOf(note.getID())});
db.close();
return ret;
}
之前,我删除了注释,然后再次添加它,但这会将它添加到数据库的末尾,而不是在相同的位置。
那么,对于这个问题,我如何根据我正在使用的方法正确更新我的笔记(联系人)之一?谢谢
更新: 我试过使用原始更新:
public void updateNote(Note note) {
SQLiteDatabase db = this.getWritableDatabase();
String strSQL = "UPDATE "
+ TABLE_NOTES + " SET "
+ KEY_TITLE + "='" + note.getTitle() + "', "
+ KEY_CONTENT + "='" + note.getContent() + "', "
+ KEY_METADATA + "='" + note.getMetadata() + "'"
+ " WHERE " + KEY_ID + "='" + note.getID() + "'";
Log.d("SQL: ", strSQL);
db.execSQL(strSQL);
db.close();
}
但仍然没有任何反应。我的日志输出:
UPDATE notes SET title='hello', content='there', metadata='Updated on: 09:48 AM - 08 Aug 2015' WHERE id='7'
我看不出有什么问题...
最佳答案
您想更新什么?要更新,您需要传递有效的(=现有的)行 ID(主键)
- 读取(获取id)
- 编辑
- 更新(使用旧 ID)
牢记
你也可以尝试使用原始的:
String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;
myDataBase.execSQL(strSQL);
或者尝试:
String where = "_id=" + note.getId();
myDataBase.update(table,cv,where,null) ;
I've tried raw and yet nothing actually happens.. "UPDATE notes SET title='hello fgwejfneqdfjoe', content='there', metadata='Updated on: 06:48 AM - 08 Aug 2015' WHERE id='7'" which look like it should be updating..
从你的 sql 语句中去掉撇号
如果您在数据库操作中使用 SQL 字符串,您很可能会遇到 SQL 语句中的字符串问题。一个撇号搞砸了 SQL 字符串,导致 SQL 语句失败。
不建议通过连接字符串来构建 SQL 语句。它是:
- 不可扩展——数据库将对 SQL 的每次执行“硬解析”——
- 每个姓氏输入都容易失败,例如 O'Connor(或类似的姓氏)、所有格或收缩输入。
- 如果按原样使用输入参数值,则用户容易受到 SQL 注入(inject)攻击。
关于java - 更新 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887722/