我又遇到了一个难题。我的数据库助手类中的update函数即将完成,但当我查询数据库时,我发现的是旧数据,而不是更新后的数据。
下面是我如何在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;我想知道我在这里错过了什么。I update在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 此时的DB应与新设备IP匹配。难道不应该吗?
发布于 2014-07-19 12:50:55
用你的values对象尝试一下可能会对你有所帮助
String COLUMN_ID = "_id=" + Id;
db.update(TABLE_DEVICES, values , COLUMN_ID, null);发布于 2014-07-19 13:27:09
我喜欢连接命令的字符串,然后执行语句
像这样的东西
String cheese = "Update table..."
db.execSQL(cheese);这不会给出任何响应,但它在任何不需要响应的地方都能很好地工作。
如果你想在更实时的情况下从命令行的角度查看数据库,你可以使用adb (android debug bridge)工具和cd进入应用程序的目录。找到数据库后,使用SQLite命令将其打开,并将数据库作为参数。您可以在那里使用纯SQL语句。
https://stackoverflow.com/questions/24836822
复制相似问题