【问题标题】:Create entries using SQLite (Android)使用 SQLite (Android) 创建条目
【发布时间】:2014-09-08 20:21:51
【问题描述】:

我在通过 JUnit Android Test 测试插入方法时遇到问题,并且数据库中没有保存 enrty:

public long save(TAV t) {
    ContentValues v = new ContentValues();
    v.put(TAV_TITRE, t.getTitle());
    v.put(TAV_DATE, t.getDate());
    v.put(TAV_DESCRIPTION, t.getDescription());
    return db.insert(TAV_TABLE, null, v);
}
//this is the JUnit Test Method 
public void testAddition() {
    setUp();
    TAV t = new TAV("titre", "date", "decsritpion");
    m.open();
    m.save(t);
    Log.i(tag, "insertion");
    testShowAll();
}

请帮忙!!!

【问题讨论】:

  • 你打开了数据库的实例吗?

标签: java android sqlite junit insert


【解决方案1】:

在您的save() 方法中,确保创建数据库实例,例如SQLiteDatabase db = this.getWritableDatabase();。然后从return db.insert(TAV_TABLE, null, v); 中删除return,即使用

public void save(TAV t) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues v = new ContentValues();
v.put(TAV_TITRE, t.getTitle());
v.put(TAV_DATE, t.getDate());
v.put(TAV_DESCRIPTION, t.getDescription());
db.insert(TAV_TABLE, null, v);
}

来自SQLiteDatabase Documents

public long insert (String table, String nullColumnHack, ContentValues values) 返回 新插入行的行 ID,如果发生错误,则为 -1

因此,如果您的目的只是在数据库中添加一行,那么您的方法不需要返回任何内容。因此您可以将方法的返回类型设为 void 并在内部使用 db.insert

【讨论】:

  • 这是一个长类型的方法;它应该有回报
  • 这就是为什么我把它改成void。你需要返回新插入行的行ID吗?如果没有,那么你可以像我提到的那样使用。检查编辑的答案。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多