jdbc执行异常后链接释放慢怎么办
3个回答
2015-01-18 · 知道合伙人互联网行家
关注
展开全部
1.connection不知道你是采用什么方式获取的,如果不是从连接池里取,你每connection.close()一次,下次get的时候会重新建立实际物理链接,这样会相当耗时。所以你检查一下是在获取connection时耗的时间多,还是在execute的时间多。代码:
long startTime = System.currentTimeMillis();
conn = getConnection(); // execute();
long endTime = System.currentTimeMillis();
System.out.println("获取链接的时间:" + (endTime - startTime));
执行的类似;
2.从你的存储过程的逻辑来说,要条件查询,更新某个字段的值,和入库,这三个步骤应该有输入参数的,那么你的这个参数是怎么传入的?
个人觉得你的这个存储过程可以优化成SQL来执行,效率应该会更好:
首先,你把输入参数放入一个临时表;
比如结构是:
_id _field
查询的条件 更新的字段
// 更新_table中存在的记录的_field字段,并且只更新_table与_tmp键值相等的记录
UPDATE _table t SET _field=(SELECT MAX(_field) FROM _tmp WHERE _id=t._id) WHERE EXISTS (SELECT 'X' FROM _tmp WHERE _id=t._id);
// 选择_table与_tmp键值不相等的记录(即_table中不存在的记录)插入_table
INSERT INTO _table (_id,_field) (SELECT _id,_field FROM _tmp t WHERE NOT EXISTS (SELECT 'X' FROM _table WHERE _id=t._id));
这样的话,每次都是两个批量操作,而且不需要输入参数,直接调用就可以,唯一需要多做的工作就是做临时表。
long startTime = System.currentTimeMillis();
conn = getConnection(); // execute();
long endTime = System.currentTimeMillis();
System.out.println("获取链接的时间:" + (endTime - startTime));
执行的类似;
2.从你的存储过程的逻辑来说,要条件查询,更新某个字段的值,和入库,这三个步骤应该有输入参数的,那么你的这个参数是怎么传入的?
个人觉得你的这个存储过程可以优化成SQL来执行,效率应该会更好:
首先,你把输入参数放入一个临时表;
比如结构是:
_id _field
查询的条件 更新的字段
// 更新_table中存在的记录的_field字段,并且只更新_table与_tmp键值相等的记录
UPDATE _table t SET _field=(SELECT MAX(_field) FROM _tmp WHERE _id=t._id) WHERE EXISTS (SELECT 'X' FROM _tmp WHERE _id=t._id);
// 选择_table与_tmp键值不相等的记录(即_table中不存在的记录)插入_table
INSERT INTO _table (_id,_field) (SELECT _id,_field FROM _tmp t WHERE NOT EXISTS (SELECT 'X' FROM _table WHERE _id=t._id));
这样的话,每次都是两个批量操作,而且不需要输入参数,直接调用就可以,唯一需要多做的工作就是做临时表。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询