使用 WHERE 子句的 SQLite 更新和增量

Posted

技术标签:

【中文标题】使用 WHERE 子句的 SQLite 更新和增量【英文标题】:SQLite Update and Increment with WHERE clause 【发布时间】:2014-03-23 07:23:12 【问题描述】:

我正在使用 SQLite,并且我正在使用 where 子句来更新数据库中的行,前提是它存在并且如果它不存在则需要插入一个新行

    public long createEntry(int x, int y, String date, int Version_Zero_HoursTable_One_DateTable)

    /*
     * first grab the values needed to increment the database values
     * */
    String[] column = new String[]DATE,NUM_X,NUM_Y;
    Cursor c = ourDatabase.query(HOURS_TABLE, column, date, null, null,
            null, null);    
    int current_x =0;
    int current_y  = 0;
    int iX = c.getColumnIndex(NUM_X);
    int iY = c.getColumnIndex(NUM_Y);
    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
        current_Y += c.getInt(iY);
        current_X += c.getInt(iX);
    
    ContentValues cv = new ContentValues();
    cv.put(NUM_X, x + current_X);
    cv.put(NUM_Y, y + current_Y);
    cv.put(DATE, date);
    String WHEREargs = DATE+"="+date;
    if(Version_Zero_HoursTable_One_DateTable == 0)
    
    return ourDatabase.update(HOURS_TABLE, cv, WHEREargs, null);
    //return ourDatabase.insert(HOURS_TABLE, null, cv);
    
    else
    
        return ourDatabase.update(HOURS_TABLE, cv, WHEREargs, null);
        //return ourDatabase.insert(DATE_TABLE, null, cv);
    

【问题讨论】:

你好,你能解释清楚吗,问题是当你想更新一行时,两行都更新了?我说的对吗 不完全是,我现在正在编辑我的问题,现在的问题是我无法更新尚不存在的行,所以我试图找出一种方法,如果不能更新行(因为不存在具有该当前日期值的行),我如何插入一行并仍然返回值?感谢您的帮助 你的意思是最后一句话,仍然返回值 是的,它确实返回了值,我在编码是否返回更新或插入时遇到问题,您如何确定游标是否正在收集值? 你能看看我的答案和END答案有一个链接 【参考方案1】:

我无法编译它,因为我在打电话。 你可以运行 2 脚本我认为 首先你可以运行更新**这没有问题因为如果行不存在则什么都没有**

其次,您可以使用 where 子句插入脚本 关于行的子句不存在

当我回家时,如果你不写,我可以写脚本,

你能看看这个链接吗 INSERT IF NOT EXISTS ELSE UPDATE?

【讨论】:

您刚刚发送的链接正是我的代码所缺少的,使用插入或替换消除了对我刚刚完成的嵌套 if 循环(确定是更新还是插入)的需要,我将重构我的代码并尽可能更新答案,谢谢您的帮助

以上是关于使用 WHERE 子句的 SQLite 更新和增量的主要内容,如果未能解决你的问题,请参考以下文章

SQLite基础-7.子句

SQLite - WHERE 子句和 UDF

《SQLite3 — 子句》

如何使用引用多个表的 WHERE 子句删除 sqlite 中的行?

如何使用替换 Where 子句实现以下火花行为

SQLite 中 WHERE 子句中的聚合函数