gpt4 book ai didi

mysql - 选择...使用 Anorm 进行更新

转载 作者:行者123 更新时间:2023-11-28 23:26:54 25 4
gpt4 key购买 nike

我正在尝试在 Play 中使用 Anorm 编写一个 SQL SELECT...FOR UPDATE,这样我就可以让多个线程与同一个数据库交互,但它引发了一个问题。

代码是:

db.withConnection { implicit connection: Connection =>
SQL"""

start transaction;

select * from push_messages where vendorId=$vendorId for update;

UPDATE push_messages set stageOne=$first, stageTwo=$second, stageThree=$third,
stageFour=$fourth, stageFive=$fifth, highestStage=$highestStage, iOSTotal=$iOSTotal,
androidTotal=$androidTotal, iOSRunningCount=$iOSRunningCount, androidRunningCount=$androidRunningCount,
problem=$newProblem, iOSComplete=$iOSCompleted, androidComplete=$newAndroidComplete,
totalStageThrees=$totalStageThrees, totalStageFours=$totalStageFours, expectedTotals=$expectedTotals,
startTime=$startTime, date=$date, topics=$topics, androidFailures=$androidFailures, iOSFailures=$iOSFailures where vendorId=$vendorId;

commit;

""".execute
}

但是,它似乎不喜欢在 select 语句中使用 .execute。有没有一种好的方法可以将其分解以执行 select...for update 以便我可以使用 execute()executeUpdate

任何帮助都将不胜感激。谢谢。

最佳答案

作为大多数 JDBC 基础库,Anorm 使用 PreparedStatement 来安全地与 DB 交互,所以你不应该将这样的多语句字符串传递给它,而应该只将单个语句传递给每个 SQL调用。

此外,关于start transaction,你最好使用JDBC的方式(例如使用Play DB DB.withTransaction { ... })。

关于mysql - 选择...使用 Anorm 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38958556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com