我还有另一个傻瓜。我的数据库助手类中保存的更新功能正在完成,但是当我查询数据库时,我发现旧数据而不是更新数据。
以下是我如何在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匹配。不应该吗?
答案 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语句。