java - 更新 SQLite 数据库

标签 java android sql database sqlite

我从本教程中设置了一个 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)

牢记

on conflict

你也可以尝试使用原始的:

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)攻击。

How do I escape single quotes in SQL queries?

关于java - 更新 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887722/

相关文章:

java - 如何在Java中基于SAS Token访问Azure WASB容器?

android - 我可以使用其他目录对 Android 资源进行分组吗

java - 使用 java 给定 ip 地址访问端口 445 上的远程系统文件

java: timezone getTimeZone ("GMT-0700")' timezone useDaylight 不正确

android - 我们如何重新启动服务?

android - 如何在 Android 中填充贝塞尔曲线下的区域

mysql - SQL:如何使用 GROUP BY 来获取聚合的聚合?

mysql - 如何生成字符串 'a' 。 .'zzz' 然后保存到表中?

mysql - SQL 全连接语法错误

Java 最小的矩形将其他矩形包围在 ArrayList 中