Corona SQLite:检查一个值是否存在。

我想检查我的 SQL 请求是否可以返回一个值:

Search_IDItem = "SELECT * FROM giftshop WHERE id ="..item_id..""
            for row_2 in db:nrows(Search_IDItem) do (..)

CheckInventory = "SELECT * FROM inventory WHERE code ="..row_2.code..""
if CheckInventory ~= nil then
    print(row_2.code)
    updateItemsCode(row_2.code, "inventory", "qtyoninventory", row_2.qtyoninventory+1)
else
    insertInventory(2,row_2.code, row_2.name, row_2.src, row_2.desc, "no",row_2.qtyoninventory,row_2.price,row_2.usetxt)
end

错误是:

near "=": syntax error

基本上,我想知道这个值是否存在,如果存在,我只会更新“quantity”字段,如果不存在,我将创建一个新的项目。

不幸的是,它不起作用!有什么建议或解决方案吗?

点赞
用户3349800
用户3349800

语法错误是SQL误解您的查询的结果。

最常见的原因之一是插入不正确的字符串。因此,我认为row_xx.code是一个字符串。

为了解决这个问题,你应该像这样用 ' 符号引用 row_xx.code:

CheckInventory = "SELECT * FROM inventory WHERE code ='"..row_2.code.."'"

更新

为了解决问题的第二部分并找出值是否存在,我建议遵循以下步骤

在旧的Java中,当我获取SQLite Cursor时,我可以像这样检查它是否具有任何行:

if(cursor.moveToFirst())
   // 它至少有一个值
else
   // 它没有任何值

当然,对于Corona来说也有类似的东西

您还可以使用以下方法更新记录(如果不存在则进行创建):

// create record IF NOT EXISTS:
String createNonExistentRec = "Insert or ignore into "...// insert key/unique values
db.execSQL(createNonExistentRec, ...);

// update values:
String updateQuery = "..."
...
2014-11-22 19:43:04
用户2767985
用户2767985

我找到了一个解决办法:

对于 db:urows "select count(*) from inventory" 中的每个 x,执行以下操作:
  如果 x>0,则表明库存为空
    对于 db:urows("SELECT count (*) FROM inventory WHERE code ='"..row_2.code.."'") 中的每个 w,执行以下操作:
       如果 w > 0,则表明该商品已经在库存中
           CheckInventory = "SELECT * FROM inventory WHERE code ='"..row_2.code.."'"
                   对于 db:nrows(CheckInventory) 中的每个 row_4,执行以下操作:
                       updateItemsCode(row_4.code, "inventory", "qtyoninventory", row_4.qtyoninventory+1)
       否则
       表明该商品不在库存中,因此我们需要将其添加!
            对于 db:urows("SELECT MAX(id) FROM inventory") 中的每个 maxid,执行以下操作:
                   insertInventory(maxid+1,row_2.code, row_2.name, row_2.src, row_2.desc, "no",1,row_2.price,row_2.usetxt)
 else
    insertInventory(1,row_2.code, row_2.name, row_2.src, row_2.desc, "no",1,row_2.price,row_2.usetxt)
end
2014-11-23 12:38:10