在java中以多线程方式插入或更新数据库中的多条记录
我正在更新数据库中的多个记录。现在,每当UI发送要更新的记录列表时,我必须更新数据库中的记录。为此,我使用JDBC模板 早期案例 早些时候,每当我从UI中获取记录时,我都会这样做在java中以多线程方式插入或更新数据库中的多条记录,java,sql,multithreading,jdbc,jdbctemplate,Java,Sql,Multithreading,Jdbc,Jdbctemplate,我正在更新数据库中的多个记录。现在,每当UI发送要更新的记录列表时,我必须更新数据库中的记录。为此,我使用JDBC模板 早期案例 早些时候,每当我从UI中获取记录时,我都会这样做 jdbcTemplate.batchUpdate(Query, List<object[]> params) 那么,我是否以正确的方式,通过使用循环来实现这一点 如果是,有人可以建议我如何使它多线程。 或者这件事有什么不对劲吗。 事实上,我对在循环中使用try-catch块犹豫不决:( 请纠正我,我真的需
jdbcTemplate.batchUpdate(Query, List<object[]> params)
那么,我是否以正确的方式,通过使用循环来实现这一点
如果是,有人可以建议我如何使它多线程。
或者这件事有什么不对劲吗。
事实上,我对在循环中使用try-catch块犹豫不决:(
请纠正我,我真的需要学习一种更好的方法,因为我自己觉得,一定有更好的方法,谢谢。您的案例看起来需要使用java验证并单独过滤出有效数据,然后发送到数据库进行更新
波层
->筛选出有效记录。
->应将无效记录与一些验证文本一起发回
在DAO层中
->批量更新您的记录列表
这将给你最好的表现
切勿将数据库插入异常用作验证机制
使集合的所有更新操作都可调用, 将其发送到java.util.concurrent.ThreadPoolExecutor。该池是多线程的 使可调用:
class UpdateTask implements Callable<Exception> {
//constructor with jdbctemplate,sql,param goes here.
@Override
public Exception call() throws Exception {
try{
jdbcTemplate.update(sql, Object[] param)
}catch(Exception ex){
return ex;
}
return null;
}
<T> List<Future<T>> java.util.concurrent.ExecutorService.invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
类UpdateTask实现可调用{
//带有jdbctemplate、sql、param的构造函数出现在这里。
@凌驾
公共异常调用()引发异常{
试一试{
jdbcTemplate.update(sql,对象[]参数)
}捕获(例外情况除外){
退换货;
}
返回null;
}
调用调用:
class UpdateTask implements Callable<Exception> {
//constructor with jdbctemplate,sql,param goes here.
@Override
public Exception call() throws Exception {
try{
jdbcTemplate.update(sql, Object[] param)
}catch(Exception ex){
return ex;
}
return null;
}
<T> List<Future<T>> java.util.concurrent.ExecutorService.invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
列出java.util.concurrent.ExecutorService.invokeAll(收集代替在单独的线程中对同一行进行批量更新,为什么不尝试在线程之间以不冲突的方式分割工作?是的,我同意你的所有观点,但我的朋友,我没有验证逻辑。例外情况是我们无法考虑代码可能失败的情况。谢谢但是,不适用于我的情况。@kinshuk4 1我将尝试在验证中捕获最大的已知问题。然后,我将期望未知原因出现异常,这是我们无法预测的。对于您的情况,您可以做一件事,您可以让两个实现在异常上。但不确定代码审阅团队是否对逻辑感到满意