java - 并发应用中的 PreparedStatement 批量更新

标签 java sql prepared-statement

我有两种方法方法 A 和方法 B。方法 A 负责向用户发送账单,方法 B 负责更新数据库。方法 B 使用 PreparedStatement。 方法 A 一次由不同的并发线程运行。例如

Thread 1- Method A
Thread 2- Method A
Thread 3- Method A

方法 A 调用方法 B 来更新数据库以判断计费失败或成功。就像

void A()
{
  send billing sms
 if (successful)
  {
   //update database with successful status
   status='success'
  }

 if unsuccessful{
 status='unsuccess'
  }
  method B(status, connection);

  }

 void B(Status s, Connection con)
  {

   PreparedStatement codes.. for update 

   }

因为方法 A 一次被不同的并发线程调用,我如何在方法 B 中实现 PreparedStatement Batch 函数说我想一次更新 50 个事务而不是一个一个地更新。我想要一些在方法 A 上创建的计数器(但由于并发线程运行 这个方法,这可能吗?)或在方法 B 中(但是当不同的并发线程调用时,计数器变量将再次为 0,所以这可能吗?)或者制作一个全局计数器类,以便每次方法 B () 是调用这个计数器增加,一旦它达到 50,然后执行批量更新(不知道它)..

请指教!!

最佳答案

老实说,我根本不会这样做。

应该处理数据库更新由于某种原因失败的可能性,如果您批处理完全不相关的账单更新,则不能。如果在您的批处理中有待处理的更新时关闭服务器,您的方法也很可能会完全错过数据库更新。

一种更简洁的方法是在一次交易中同时处理多个帐单。根据用例,这可能是合适的(批处理),也可能完全不切实际(如果它是用户驱动的操作)。

关于java - 并发应用中的 PreparedStatement 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811131/

相关文章:

java - 读取大文件并连续处理时连接重置

java Generic<T> 与 Generic 相同吗?

JavaFX 按钮悬停缩放

sql - 流水线函数上的 Oracle 查询工作正常,但如果我添加条件就会窒息

php - mysqli_fetch_assoc() 期望参数/调用成员函数 bind_param() 错误。如何获取实际的mysql错误并修复它?

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

java - Eclipse "run as android"什么都不做

mysql - 我的关节乘以我的总和结果

sql - 将数据透视表与另一个复杂表连接起来

PHP PDO -> 准备好的查询返回错误(相同的查询未准备好工作)