首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLlite update语句updating...Am I漏掉了什么?

SQLlite update语句updating...Am I漏掉了什么?
EN

Stack Overflow用户
提问于 2014-07-19 12:43:16
回答 2查看 131关注 0票数 0

我又遇到了一个难题。我的数据库助手类中的update函数即将完成,但当我查询数据库时,我发现的是旧数据,而不是更新后的数据。

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

代码语言:javascript
复制
 NiDB = new NetInfoDatabase(this);

下面是我调用更新入口代码的方式:

代码语言:javascript
复制
NiDB.updateDevice(device);

下面是我的数据库更新代码:

代码语言:javascript
复制
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的助手类,用于保存所有数据。我知道那里的信息设置是正确的。我甚至知道我的更新代码正在执行,并且我传递的设备在执行以下行之前具有正确的信息:

代码语言:javascript
复制
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调用更新吗?任何建议都将不胜感激。

谢谢。

作为一个附加点,我也不能从我的数据库中删除。即使应用程序完全关闭并重新启动,该问题仍然存在。

下面是我的删除代码:

代码语言:javascript
复制
public void deleteDevice(Devices device){
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_DEVICES, COLUMN_ID + "= ?",
            new String[] { String.valueOf(device.getId()) });
    db.close();
}

再说一次,如果你和我一样认为这是正确的,也许我称之为这一点的方式中有一些东西。

代码语言:javascript
复制
    @Override
protected void onResume(){

    super.onResume();

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

下面是来自checkDBIps()的重要代码片段;

代码语言:javascript
复制
    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);

打印语句如下所示:

代码语言:javascript
复制
here is the new device IP0.0.0.0
here is what is in the DB 10.0.0.29 

此时的DB应与新设备IP匹配。难道不应该吗?

EN

回答 2

Stack Overflow用户

发布于 2014-07-19 12:50:55

用你的values对象尝试一下可能会对你有所帮助

代码语言:javascript
复制
String COLUMN_ID = "_id=" + Id;

db.update(TABLE_DEVICES, values , COLUMN_ID, null);
票数 1
EN

Stack Overflow用户

发布于 2014-07-19 13:27:09

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

像这样的东西

代码语言:javascript
复制
String cheese = "Update table..."
db.execSQL(cheese);

这不会给出任何响应,但它在任何不需要响应的地方都能很好地工作。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24836822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档