对于复杂的业务sql查询,可以考虑如下建议。
1.先通过sql查询出主表信息列表list.
2.for循环list,补充查询主表对应的子表信息。
3.在2的步骤中,可以使用多线程处理for查询。
可以参考如下:
其中conList 是查询主表返回的list
//线程池初始化
ThreadPoolExecutor executor = ThreadPool.getThreadPool(5,8, 3000, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(2000));
//得到线程池中线程队列
LinkedBlockingQueue<Runnable> queue = (LinkedBlockingQueue<Runnable>) executor.getQueue();
int countTool= conList.size();
final CountDownLatch countDownLatch = new CountDownLatch(countTool);
for(int i=0;i < countTool;i++){
final Map tempMap = (Map) conList.get(i);
String contractNo = (String) tempMap.get("CONTRACTNO");
String workflowId = (String) tempMap.get("WORKFLOWID");
params.put("WORKFLOWID", workflowId); //工作流
final IbatisDao dao=new IbaitsDaoImpl();
//防止 params 被重复引用 需要重新 new 对象 并使用该new 对象
final Map myParam = new HashMap();
myParam.putAll(params);
//向线程池 放入待处理的任务信息 使用内部类进行 查询
executor.execute(new Runnable(){
public void run() {
//统计审核次数
try {
Map auditMap = (Map) dao.queryObjectBySql("QUERY_AUDIT_NUM_BY_WORKFLOWID",myParam);
tempMap.put("AUDITNAME",auditMap.get("AUDITNAME"));
tempMap.put("AUDITNUM",auditMap.get("AUDITNUM"));
//查询审核时间
auditMap = (Map) dao.queryObjectBySql("QUERY_AUDIT_TIME_BY_WORKFLOWID",myParam);
tempMap.put("AUDITTIME",auditMap.get("AUDITTIME"));
} catch (SQLException e) {
e.printStackTrace();
}
//线程计数器 减 1
countDownLatch.countDown();
}
});
}
//所有子线程 执行完成之后 主线程再继续向下
countDownLatch.await();
System.out.println("-------------query end------");
?
分享到:
相关推荐
### Navicat for MySQL执行SQL脚本细节 #### 一、引言 在数据库管理和开发过程中,使用图形化工具能够极大地提升工作效率。Navicat for MySQL作为一款强大的MySQL图形化管理工具,在执行SQL脚本方面提供了丰富的...
在编程领域,多线程是提高程序执行效率的重要技术之一,尤其在处理大量数据或进行耗时操作如数据库查询时。易语言,一种简洁而直观的中文编程语言,提供了实现多线程的能力,使得开发者可以同时执行多个任务,提高...
在本案例中,多线程被用来同时查询同一数据库,这有助于减少整体查询时间,特别是当数据库包含大量数据时。 接下来,我们关注如何在易语言中创建和管理线程。易语言提供了`创建线程`、`等待线程`、`结束线程`等指令...
2. **线程函数**:每个线程执行的函数,包含数据库连接、SQL查询、结果处理和同步操作。 3. **同步点**:在关键操作(如数据写入或共享资源访问)前后设置同步点,确保线程安全。 4. **结果合并**:所有线程完成后,...
2. **Oracle数据库操作**:一旦建立了连接,我们可以通过`Statement`或`PreparedStatement`对象来执行SQL语句,包括查询、插入、更新和删除数据。在本示例中,还涉及到调用Oracle数据库中的函数和存储过程,这通常...
这使得多线程非常适合于I/O密集型任务,比如读写文件、网络请求等,在等待I/O操作完成的过程中,其他线程仍然可以继续执行,从而提高整体的程序执行效率。 ##### 1.2 Python中的多线程 Python中的多线程可以通过`...
数据库(DB)读取通常涉及SQL查询,多线程模型可以让我们并行执行这些查询,提高整体性能。例如,如果需要从数据库中获取多个表的数据,每个线程可以负责一个或多个表的查询,这样就避免了单一线程串行执行时的等待...
这个类库可能包含了优化的数据库连接管理、查询执行、事务处理等核心功能,旨在提高.NET应用程序与SQL Server之间的交互效率。 描述中提到的“基于线程安全的对象池”是一个重要的设计模式,它在多线程环境中确保了...
- **批处理和多线程**:通过批量提交SQL语句或者利用多线程并行执行查询,可以充分利用硬件资源,减少网络通信开销,从而提升查询速度。 - **异步执行**:对于耗时较长的操作,采用异步模式,可以避免阻塞主线程,...
使用预编译的`PreparedStatement`可以更有效地执行SQL,避免SQL注入,并提高性能。批量插入数据时,可以使用`addBatch()`和`executeBatch()`方法,以减少与数据库交互的次数。 对于数据导出,可能是读取数据库数据...
8. **异步I/O**:MySQL的C API提供了异步操作的能力,这在多线程环境中特别有用,因为它允许线程在等待数据库响应时执行其他任务,提高了系统整体效率。 在`ThreadOdbc`示例代码中,我们可能会看到如何创建和管理...
在给定的"使用线程快速检测SQL连接的Delphi源码"中,我们聚焦于如何利用多线程技术来提高SQL数据库连接的检测效率。Delphi是一种基于Object Pascal语言的集成开发环境(IDE),它以其强大的Windows应用程序开发能力...
在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应速度和整体效率。"SQL Server 2008查询性能优化源代码"这一资源提供了一种深入学习和实践的方法,帮助我们理解并提升SQL...
当SQL查询执行缓慢时,这可能意味着资源浪费、用户体验下降以及整体系统效率降低。本压缩包文件"sql 查询慢的48个原因分析.doc"提供了对这一问题的深入探讨,旨在帮助用户识别并解决SQL查询速度减慢的各种因素。以下...
多线程是程序设计中的一个重要概念,特别是在处理大量并发任务时,它可以使得多个任务同时执行,从而提高整体性能。 在描述中提到的“后台管理扫描器”,是指该工具专注于探测网站的后台管理系统,这些系统通常包含...
好,下面我就为大家介绍一种方法:构建SQL池,分离业务逻辑层和数据访问层,让业务逻辑层从低效的数据库操作解脱,以提高系统整体性能。 (一)SQL池 SQL池是SQL容器,用于存放业务逻辑层抛过来的SQL语句。SQL池主要...
2. **异步数据库访问**:线程可以异步地执行SQL查询,避免阻塞主线程,提高程序响应性。 3. **线程安全的数据访问**:当多个线程同时访问数据库时,必须确保所有数据库操作都是线程安全的,防止竞态条件和死锁。 4...
多线程技术是并发处理的关键,它允许多个任务同时执行,从而提升整体性能。在数据库备份过程中,多线程可以显著加速备份进程,尤其是在面对大规模数据时。这款商业源码通过创建并行备份任务,使得多个数据库表或索引...
通过创建多个线程,数据采集器可以并行处理多个任务,提高整体工作效率。 二、数据采集框架 数据采集通常涉及HTTP请求、HTML解析、数据提取和存储等步骤。在C#中,可以使用`System.Net.Http`库发送HTTP请求,如`...