gpt4 book ai didi

java - 时间作为 SQL 的关键导致错误

转载 作者:太空狗 更新时间:2023-10-29 16:21:42 25 4
gpt4 key购买 nike

我正在尝试修复有关 SQL(在 Android 中使用)的错误,该语句基本上如下所示:

INSERT INTO log (time, message) VALUES (datetime('now'),<a_message>);

“datetime(now)”似乎是进入数据库的关键,问题是它可以在一毫秒内被调用两次。如果发生这种情况,将抛出 SQL 错误,因为键不是唯一的。

我可以使用 REPLACE into,但这会覆盖一个(或多个)条目。我也可以检查错误代码,睡一会儿再试。我只是想知道是否有人对这个问题有更好的解决方案?我对 SQL 不是很有经验。

谢谢。

最佳答案

无论如何,您应该更加犹豫是否将日期时间用作主键,因为时区、闰秒和许多其他会让您感到惊讶的狂野和困惑的世界。绝对不能保证 a1 = datetime('now') 总是小于或等于下一次调用 a2 = datetime('now')

阅读这篇文章,大约 1/3 之后他开始谈论日期、时间和时区。这应该使您相信您不应该尝试做您在这个问题中要求的事情:

https://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx

如果我想要一个快速而肮脏的 hack 解决方法,我会将插入放入 while 循环并在插入失败时捕获错误,然后在 1 毫秒后重试。这很糟糕,就像把卧室弄得一团糟,但有时这是必要的,因为重新设计表以拥有一个合理的主键会花费太长时间。

但是,如果您这样做,请做好准备,让代码在那个 while 循环中耐心等待数十毫秒,当它最终找到一个空位时,它并没有按照您的预期执行因为它出现在未来发生的另一个条目之前(实际上是过去)。想想就让人头疼。

关于java - 时间作为 SQL 的关键导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12896446/

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