sqlite - 将 sqlite 用于数据库队列的最佳实践

标签 sqlite jdbc transactions

我正在为生产者-消费者队列使用 sqlite 数据库。

一个或多个生产者使用新的自动增量主键一次插入一行。

有一个使用者(用 java 实现,使用 sqlite-jdbc 库),我希望它读取一批行并删除它们。似乎我需要事务来执行此操作,但是尝试将 SQLite 与事务一起使用似乎无法正常工作。我是不是想多了?

如果我最终确实需要事务,那么在 Java 中执行此操作的正确方法是什么?

 Connection conn;
 // assign here

 boolean success = false;
 try {
    // do stuff
    success = true;
 }
 finally
 {
    if (success)
       conn.commit();
    else
       conn.rollback();
 }

最佳答案

this trail有关使用 Java JDBC 处理事务的介绍。

至于你的用例,我认为你应该使用事务,特别是如果消费者很复杂。棘手的部分总是决定一行何时被消耗以及何时应该再次考虑。例如,如果在消费者实际执行其工作之前出现错误,您将需要回滚。但如果该行包含非法数据(如数字字段中的文本),则回滚将变成无限循环。

关于sqlite - 将 sqlite 用于数据库队列的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1631051/

相关文章:

python - 仅使用变量通过 python 对 sqlite 表进行建模

c - 库例程调用无序错误

regex - REGEX Sqlite不区分大小写不起作用

.net - 命令失败后 Npgsql 不提交事务

c# - Windows 上文本文件的事务处理

grails - 在只读模式(FlushMode.MANUAL)中不允许进行写操作:

android - 是否可以直接从 SQLite 读取联系人列表

java - jdbc 代码中的错误 -> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : You have an error in your SQL syntax

java GUI简单登录后端mysql

java - 通过 jdbc 运行 shell 命令