如何解决JDBC prepareStatement批量更新速度和数据库单表的设计。让计算更快。

问题描述

我来介绍下此报表需要的功能然后我现在的实现下面这张就是报表的样子每一个单元格都是统计的人数有多少个。而且那个数字是可以钻取的点开后可以显示具体是哪些人的基本信息。其实现在的每一张表都是每一个有数据的单元格都是一条SQL语句有简单有复杂的。下面就是表的结构。大家可以看到有表名。有个坐标5-4之类的意思是对应到该表第5行第4列的坐标。这样就区分了每张表的每个单元格的唯一性。后面的bianma就是储存改单元格的SQL语句。后面那个数字刚开始表是没有的是根据计算每个单元格的SQL语句而算出来的个数然后批量更新进去的。现在说下我代码的思路我前台是通过异步来进行计算的成功的话就返回计算成功提示。现在是前台传过来好多表的表名然后我通过表名查询出所有表下面的单元格拿出里面的SQL然后循环执行查询里面的SQL获取查询单元格SQL的结果。然后把结果批量更新到表中统计数量的COUNTBIANMA的字段里面去。[img=http://img.bbs.csdn.net/upload/201410/28/1414468131_403761.jpg][/img]问题来了如果全选表一次性计算要将近半个小时非常慢。大家可以来讨论和设计从表的设计和程序的设计都可以为楼楼提供些想法和建议。可以有新技术。因为要设计到钻取功能目前想到的就是这个表设计。因为前台点击数字我传到后台的是该表名和坐标然后就可以拿到该单元格的SQL从而查询出来。

解决方案

解决方案二:

解决方案三:
补上最后一张图片
解决方案四:
目前发现貌似逐个执行单元格里面的查询SQL也比较费时。
解决方案五:
查询优化做一个查询统计表,把第一次查询每一条需要消耗多长时间做一个时间标记;第二次查询的时候使用线程来做,把指定耗时范围内的查询通过线程进行分配。记住线程池的大小分配!更新也可以参考上述方式。程序运行的时候可以采用Profile来监控你的应用情况!然后设置相应的线程池与数据源大小达到最优的情况为止!

时间: 2024-08-01 13:20:11

如何解决JDBC prepareStatement批量更新速度和数据库单表的设计。让计算更快。的相关文章

一个月没有解决的问题.如何更新记录到数据库中.

问题描述 PublicSubUpdateRow()DimstrSqlAsStringDimobjDataAdapterAsNewOleDbDataAdapterDimobjDataSetAsNewDataSetDimobjDataTableAsNewDataTableDimobjDataRowAsDataRowDimobjConnectionAsNewOleDbConnectionobjConnection.ConnectionString="DataSource=.;InitialCatalo

postgresql sql批量更新记录_数据库其它

复制代码 代码如下: CREATE FUNCTION updateTchrNm() RETURNS void AS $body$ DECLARE rownum integer := 1; BEGIN while rownum <= 1000 LOOP     update t_tchr set tchr_nm = '田中愛子' || rownum, tchr_knm = 'タナカアイコ' || rownum, tchr_anm = 'tanaka' || rownum where tchr_cd

ORACLE中如何批量更新关联表

在SQL SERVER中,关联表的批量更新,可以参看这里: http://www.cnblogs.com/downmoon/archive/2007/12/29/1019832.html Oracle下没找到好的语法,临时用这个: update employee set hrdeptname= (select d.DEPTNAME from DEPARTMENT d where ROWNUM=1 and d.deptID=employee.hrdeptID ) 对应的SQL Server语法:

如何用不同的sqlDataAdapter 批量更新同一个数据表

问题描述 问:从一个数据库访问类的静态方法中查询返回一个表,并绑定到dataGridView中,在dataGridView中加.删.改数据后怎么一次性批量更新数据到数据库...不能访问数据库访问类中的初始sqlDataAdapter...我没积分不好意思...还是请求高手的帮助(希望能有实例).... 解决方案 解决方案二:用update()啊

sql2005 批量更新问题的解决方法_mssql2005

首先注意Statement 和PreparedStatement的问题 Statement sm = cn.createStatement(); sm.addBatch(sql1); sm.addBatch(sql2); ... sm.executeBatch() 用Statement的好处就是每次可以直接传一个SQL语句进去,不用管那么多.可是在数据量比较大的时候,应该会对效率有影响.不建议使用. PreparedStatement ps = cn.preparedStatement(sql)

sql server 批量更新问题的解决方法

Statement 和PreparedStatement的问题 Statement sm = cn.createStatement(); sm.addBatch(sql1); sm.addBatch(sql2); ... sm.executeBatch() 用Statement的好处就是每次可以直接传一个SQL语句进去,不用管那么多.可是在数据量比较大的时候,应该会对效率有影响.不建议使用. PreparedStatement ps教程 = cn.preparedStatement(sql);

在Hibernate中处理批量更新和批量删除

批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据.以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: tx = session.beginTransaction(); Iterator customers=session.find("from Customer c where c.age>0").iterator(); while(customers.hasNext()){ Customer c

jsp Hibernate批量更新和批量删除处理代码_JSP编程

以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: tx = session.beginTransaction();Iterator customers=session.find("from Customer c where c.age>0").iterator();while(customers.hasNext()){Customer customer=(Customer)customers.next();customer

小议SQLServer批量更新的优化

听全老大的JDBC课的时候,听到一节是讲在利用JDBC中处理批量更新oracle数据时候的特性,让我很为JDBC的特性感的兴奋,利用这个特性可以在批量更新数据的时候不同往常一样每次都需要传送完成的SQL语句到数据库中.其中示范代码如下: 1 import java.sql.*;2 3 public class BatchUpdates4 {5   public static void main(String[] args)6   {7     Connection          conn =