我正在为生产者-消费者队列使用 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/