1

我根据数据库中的信息创建了一些对象。我的表如下所示:

tbl_Book
+-----+-------+---------+-------+------+
| _id | Title | Author  | Pages | ISBN |
+-----+-------+---------+-------+------+
|   1 | Test1 | Author1 |   111 | 1234 |
|   2 | Test2 | Author2 |   222 | 2345 |
|   3 | Test3 | Author  |   333 | 3456 |
+-----+-------+---------+-------+------+

我创建的对象只需要来自id、title 和 ISBN的信息,所以我只从数据库中选择这些值来创建我的对象。现在我只想更新数据库中的ISBN,所以我的对象中有一个方法,代码如下:

Book b = new Book(id, title, isbn);
b.setISBN(value);

// Code from setISBN
public void setISBN(int isbn) 
{
    this.isbn= isbn;

    //  DB updaten
    ContentValues cv = new ContentValues();

    cv.put("_id", getId());
    cv.put("ISBN", isbn);

    db.replace("tbl_Book", null, cv);
}

但是使用这种方法会导致SQLiteConstraintException因为作者、标题和页面为空。如果我只有数据集中的一些信息,如何更新表中的行?不应触及数据集中的所有其他项目。

4

1 回答 1

2

为什么不使用Update()?似乎_id是您表的主键。如果您的意图只是在您已经拥有主键时更新记录,那么它应该非常简单:

String whereClause = "_id=" + getId();
ContentValues cv = new ContentValues();
cv.put("ISBN", isbn);

//update(String table,ContentValue value, String whereClause, String[] whereArgs)
db.update("tbl_Book", cv, whereClause, null);

据我所知(也许我错了),Replace()将首先删除一行(如果存在),然后根据提供的值插入一条新记录。在您的情况下,我认为它会删除相应的记录(基于 id),然后尝试插入新记录:

例如,假设_id是 1:

+-----+-------+---------+-------+------+
| _id | Title | Author  | Pages | ISBN |
+-----+-------+---------+-------+------+
|   1 | Test1 | Author1 |   111 | 1234 |

将被替换为:

+-----+-------+---------+-------+------+
| _id | Title | Author  | Pages | ISBN |
+-----+-------+---------+-------+------+
|   1 | NULL  |   NULL  |  NULL | 4321 |

我认为这不符合您的需要。因此,我认为适合您的目的Update更好。

于 2013-06-15T22:57:55.240 回答