SQLite更新语句没有更新...我错过了什么?

时间:2014-07-19 04:43:16

标签: android sqlite

我还有另一个傻瓜。我的数据库助手类中保存的更新功能正在完成,但是当我查询数据库时,我发现旧数据而不是更新数据。

以下是我如何在onResume中建立与数据库的连接(我使用onPause来关闭服务等)

 NiDB = new NetInfoDatabase(this);

以下是我如何调用更新条目代码:

NiDB.updateDevice(device);

这是我的数据库更新代码:

public int updateDevice(Devices device){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, device.getName());
    values.put(COLUMN_IP, device.getIp());
    values.put(COLUMN_MAC, device.getMac()); //Device MAC
    values.put(COLUMN_SSID, device.getSSID()); //Device SSID
    System.out.println("in the db code deviceIP " + device.getIp());
    // updating row
    int i =  db.update(TABLE_DEVICES, values, COLUMN_ID+" = ?",
            new String[] { String.valueOf(device.getId()) });

    db.close();

    return i;
}

我还有一个名为Devices的辅助类,它包含所有数据。我知道信息正确地设置在那里。我甚至知道我的更新代码正在执行,并且我传递的设备在执行以下行之前具有正确的信息:

int i =  db.update(TABLE_DEVICES, values, COLUMN_ID+" = ?",
            new String[] { String.valueOf(device.getId()) });

    db.close();

    return i;

我想知道我在这里失踪了什么。我更新也会在onResume中调用,如果这有所不同。

当我从用于更新数据库的设备打印出ip时,我得到了正确的IP,但是当我从数据库中调用该行时,我得到了相同的旧错误IP。缺什么?我是否需要将更改提交到数据库?我是否需要不从onResume调用更新?任何建议将不胜感激。

谢谢。

作为兴趣的附加点,我也无法从我的数据库中删除。即使通过完整的应用程序关闭和重新启动,问题仍然存在。

这是我的删除代码:

public void deleteDevice(Devices device){
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_DEVICES, COLUMN_ID + "= ?",
            new String[] { String.valueOf(device.getId()) });
    db.close();
}

再次,如果这看起来对你来说正确,或许对我来说也许有一些东西我称之为。

    @Override
protected void onResume(){

    super.onResume();

    //check wifi connection. Then run scan. 
            if(!checkCon(this)){
                wifiCheck();
            }else{
                NiDB = new NetInfoDatabase(this);
                checkDbIps();
                upDateSpinner();
            }
}

以下是checkDBIps();

中的代码片段
    device.setIp("0.0.0.0");

    NiDB.updateDevice(device);

    System.out.println("here is new device IP" + device.getIp());
    String dbIP = NiDB.getDevice(device.getId()).getIp();
    System.out.println("here is what is in the DB " + dbIP);

打印报表打印如下:

here is the new device IP0.0.0.0
here is what is in the DB 10.0.0.29 

此时数据库应与新设备IP匹配。不应该吗?

2 个答案:

答案 0 :(得分:1)

尝试使用您的值对象可能会帮助您

String COLUMN_ID = "_id=" + Id;

db.update(TABLE_DEVICES, values , COLUMN_ID, null);

答案 1 :(得分:1)

我喜欢连接命令的字符串然后执行语句

有点像这样

String cheese = "Update table..."
db.execSQL(cheese);

这不会给出任何响应,但在任何不需要响应的地方都能正常运行。

如果您想在更实时的情况下从命令行角度查看数据库,可以使用adb(android debug bridge)工具并cd进入应用程序目录。找到数据库并使用 SQLite 命令以数据库作为参数打开它。您可以在那里使用纯SQL语句。