【问题标题】:SqlDelight ON CONFLICT DO UPDATE throws near "ON": syntax error (code 1 SQLITE_ERROR)SqlDelight ON CONFLICT DO UPDATE 在“ON”附近抛出:语法错误(代码 1 SQLITE_ERROR)
【发布时间】:2022-06-15 21:52:33
【问题描述】:

我在 KMM 项目中使用 SqlDelight。我在使用INSERT ON CONFLICT DO UPDATE 命令时遇到问题。

经过一番调查,我发现我需要将我的方言版本的 SqlDelight 更新到 3.25,我这样做了,它工作正常,但它仍然在 Api 29 及更低版本上崩溃。

我在像素 4 Api 29 模拟器和物理设备像素 3 Api 28 上对其进行了测试,两者均崩溃。

在 Pixel 2 Api 30 及更高版本的模拟器上运行良好。

SqlDelight 版本:1.5.3

方言 = "sqlite:3.25"

我的插入语句如下所示

insertLocalPortfolioItem:
INSERT INTO localPortfolioList(name, symbol, pricePerShare, currency, cost, noOfShares, logo, availableFunds, orderAction)
VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(symbol) DO UPDATE SET noOfShares=excluded.noOfShares;

堆栈跟踪:

android.database.sqlite.SQLiteException: near "ON": syntax error (code 1 SQLITE_ERROR): , while compiling: INSERT INTO localPortfolioList(name, symbol, pricePerShare, currency, cost, noOfShares, logo, availableFunds, orderAction)
VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(symbol) DO UPDATE SET noOfShares=excluded.noOfShares

有什么想法吗?

【问题讨论】:

  • 您有更多机会在kotlin slack,#squarelibraries 频道中获得答案,但对我来说,这看起来像是一个错误,应该是reported。还要检查您是否可以使用最新的 alpha 2.0.0-alpha02 重现它,因为它可能已经在那里修复了

标签: android sql kotlin kmm sqldelight


【解决方案1】:

您的问题可能出在 Android 附带的 SQLite 版本中,upsert 子句出现在 SQLite 3.24+ 中。 如果您使用的是 AndroidX 中的 SupportSQLiteDatabase API,则可以使用 Requery 中的 SQLite 构建,这是一个直接替换:

https://github.com/requery/sqlite-android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2018-08-02
    • 2021-02-16
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多