我在本教程中设置了一个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;
}
以前,我已删除了该笔记,然后再将其添加,但这会将其添加到数据库的末尾而不是相同的位置。
那么,对于这个问题,如何从我正在使用的方法中正确更新我的一个笔记(联系人)?感谢
更新: 我尝试过使用原始UPDATE:
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'
我看不出有什么问题......
答案 0 :(得分:2)
您想要更新什么?要进行更新,您需要传递有效(=现有)行ID(主键)
请记住
您也可以尝试使用raw:
String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;
myDataBase.execSQL(strSQL);
或尝试:
String where = "_id=" + note.getId();
myDataBase.update(table,cv,where,null) ;
我尝试过原始但实际上并没有发生任何事情......“更新说明SET title ='hello fgwejfneqdfjoe',content ='there',metadata ='更新于:06:48 AM - 2015年8月8日'WHERE id = '7'“看起来应该更新..
从你的sql语句中删除Apostrophe
如果在数据库操作中使用SQL字符串,则可能在SQL语句中遇到字符串问题。一个撇号将SQL字符串搞砸,导致SQL语句失败。
建议不要通过连接字符串来构建SQL语句。它是:
答案 1 :(得分:0)
只有在执行select before before刷新值时才可以调用update方法,我认为这样:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DatabaseHandler db = new DatabaseHandler(this); /** * CRUD Operations * */ // Inserting Contacts Log.d("Insert: ", "Inserting .."); db.addContact(new Contact("Ravi", "9100000000")); db.addContact(new Contact("Srinivas", "9199999999")); db.addContact(new Contact("Tommy", "9522222222")); db.addContact(new Contact("Karthik", "9533333333")); // Reading all contacts Log.d("Reading: ", "Reading all contacts.."); List contacts = db.getAllContacts(); for (Contact cn : contacts) { Log.d("TEST", "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber()); if ("Tommy".equals(cn.getName()) { cn.setName("Timmo"); db.updateContact(cn); //like your updateNote } } Log.d("Reading: ", "Reeeeload all contacts.."); contacts = db.getAllContacts(); for (Contact cn : contacts) { if ("Timmo".equals(cn.getName()) { Log.d("TEST", " Hello Timmo"); } } }
答案 2 :(得分:0)
我设法解决了我的问题。感谢@Tomasz最好的指示。
修正了updateNote:
public void 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());
db.update(TABLE_NOTES, values, KEY_ID + " = ?",
new String[]{String.valueOf(note.getID())});
db.close();
}
主叫声明:
db.updateNote(new Note(identifier, editTextTitle.getText().toString(), editTextContent.getText().toString(), "Updated on: " + printStandardDate()));
这些以及其他修复了尝试更新我最终修复或创建变通方法的RecyclerView项目时出现的问题。该应用程序现在运行完美,我已发布商店更新:https://play.google.com/store/apps/details?id=com.timmo.notes
我应该尽快将源发布到github,并添加一个指向描述的链接。
再次感谢所有帮助过的人!