数据库连接使用proxool连接JDBC

代码 JAVA类

package com.czr.proxool;import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** 使用proxool连接orcale* 当使用JDBC操作数据时出现起出打开游标最大数的原因:一般出现在执行大量插入语句 时,没有关闭Statement.
解决方法:每次插入一条数据时或找执行一次批量提交时,记得* @author chenzhirong*/
public class ProxoolUtile {public static String dburl = "jdbc:oracle:thin:@192.168.104.192:1521:tim";public static String user = "tim";public static String password = "tim_8968888";private static ProxoolUtile proxoolUtile;private static Connection conn;private static Statement stmt;private static int count;public static ProxoolUtile getProxoolUtile() {// TODO Auto-generated method stubif (proxoolUtile == null) {proxoolUtile = new ProxoolUtile();}return proxoolUtile;}/*** JDBC方式测试* * @throws Exception*/public static void test1() throws Exception {String testsql = "select * from village t where lastid = 346";// 1:注册驱动类Class.forName("oracle.jdbc.driver.OracleDriver");// 2:创建数据库连接Connection conn = DriverManager.getConnection(dburl, user, password);// 3:创建执行SQL的对象Statement stmt = conn.createStatement();// 4:执行SQL,并获取返回结果ResultSet rs = stmt.executeQuery(testsql);// 5:处理返回结果,此处打印查询结果while (rs.next()) {System.out.print(rs.getLong("id") + "\t");System.out.print(rs.getString("name") + "\t");System.out.println();}// 6:关闭数据库连接conn.close();}/*** proxool方式测试 创建数据库连接* * @throws Exception*/public static Connection getConn() {// Java应用中先要加载配置文件,否则谁知道你配置给谁用的try {if (conn == null) {JAXPConfigurator.configure("proxool.xml", false);// 1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// 2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的timalias,参数格式为:proxool.数据源的别名}if (conn == null || conn.isClosed() == true) {conn = DriverManager.getConnection("proxool.DBczr");}} catch (ProxoolException e) {System.out.println("配置文件不正確");e.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("加載驱动");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("数据库连接断开");e.printStackTrace();}return conn;}/*** 使用Statement批量提交SQL* * @param sql SQL语句* @return*/public int[] insertStmtBatchSql(String sql) {int[] i = null;if (count == 0) {try {if(conn == null || conn.isClosed() == true){conn = ProxoolUtile.getConn();}stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);} catch (SQLException e1) {e1.printStackTrace();}}try {// 增加批量语句if(stmt == null){stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);}stmt.addBatch(sql);count++;// 500条SQL时,执行批量提交if (count > 500) {i = stmt.executeBatch();conn.commit();stmt.close();conn.close();count = 0;}} catch (SQLException e) {e.printStackTrace();}return i;}/*** * Statement* 不完整个,自己加SQL语句参数* @param sql* @return*/public void insertBatchSql(String sql) {int count = 0;try {if (conn == null) {// Java应用中先要加载配置文件,否则谁知道你配置给谁用的JAXPConfigurator.configure("proxool.xml", false);// 1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// 2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的timalias,参数格式为:proxool.数据源的别名conn = DriverManager.getConnection("proxool.DBczr");// 设置手动提交conn.setAutoCommit(false);}PreparedStatement ps = conn.prepareStatement(sql);count++;// 记录if (count % 500 == 0) {// 当增加了500个批处理的时候再提交ps.executeBatch();// 执行批处理conn.commit();// 提交stmt.close();conn.close();// 关闭数据库}} catch (ProxoolException e) {System.out.println("配置文件不正確");e.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("加載驱动");e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("数据库连接断开");e.printStackTrace();}}/*** 查询序列* Statement记得关闭,不然使用批量插入会有问题* @param sql* @return*/public Long querySeq(String sql) {Long seq = Long.valueOf(1);
//      Connection conn = null;Statement stmt = null;try {if(conn == null || conn.isClosed() == true ){conn = ProxoolUtile.getConn();}stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);while (rs.next()) {seq = rs.getLong("nextval");}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally{try {stmt.close();
//              conn.close();} catch (SQLException e) {e.printStackTrace();}}return seq;}/*** 关闭连接*/public static void closeConn() {try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {// getStatement();}
}

proxool  XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely> <proxool> <alias>DBczr</alias> <!--数据源的别名 10.142.54.121 --><driver-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</driver-url> <!--url连接串--> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!--驱动类--> <driver-properties> <property name="user" value="czr"/> <!--用户名--> <property name="password" value="czr"/><!--密码--> </driver-properties> <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 --> <maximum-connection-count>100</maximum-connection-count> <!--最小连接数(默认2个)--> <minimum-connection-count>10</minimum-connection-count> <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒--> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> <maximum-new-connections>10</maximum-new-connections> <!--最少保持的空闲连接数(默认2个)--> <prototype-count>5</prototype-count> <!--在使用之前测试--> <test-before-use>true</test-before-use> <!--用于保持连接的测试语句 --> <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql> </proxool>
</something-else-entirely>

耍要的JAR包

dom4j-1.6.1.jar
log4j-1.2.13.jar
ojdbc14.jar
proxool-0.9.1.jar
proxool-cglib.jar

JAVA使用JDBC批量插入SQL相关推荐

  1. JDBC批量插入sql-踩坑笔记

    引言 使用JDBC连接mysql进行批量插入数据时出现bug,卡了两天还是没头绪,路过的兄弟如果有什么经验还请指点一番.抱拳抱拳! 控制台提示sql语法有错误: 正文 首先JDBC连接mysql封装了 ...

  2. 转:Mybatis与JDBC批量插入数据库哪个更快

    转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...

  3. jdbc批量插入、批量删除、批量更新

    谨记:字符串拼接的时候一定要用引号引起来. 技巧:当jdbc处理sql语句时提示错误,可以将执行的sql语句打印出来,然后再在数据库中执行,从而解决错误. 一.JDBC的批量插入 JDBC批量插入主要 ...

  4. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...

  5. JDBC批量插入数据优化,使用addBatch和executeBatch

    >>.在之前的玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入 中其实忽略了一点,那就是SQL的批量插入的问题,如果来个fo ...

  6. jdbc 批量执行sql

    最近有个需求是需要在java 后端执行导入,数据量比较大, 需要对数据进行很多操作,最后要执行插入数据操作, 一开始先组织好插入数据的sql语句放在数组中,使用的是 jdbcTemplate.batc ...

  7. jdbc批量插入的4种方式【百万条数据插入只需几秒】

    mysql数据库准备 #打开数据库test01; use test01; #创建表a,表a包含int型的id列.可变长度型的name[长度20个字符] create table a (id INT,N ...

  8. JDBC 批量插入数据

    当需要批量插入数据到数据库时,我们可以利用基础的Statement或PreparedStatement外加for循环来实现操作,但这种方式效率奇低. 因此,当需要成批插入或者更新记录时,我们可以利用J ...

  9. spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较

    工具框架用spring-batch,数据库是mysql(未做特殊优化). 比较数据框架mybatis和spring jdbc的插入效率. Mybatis三种实现: 1.mybatis的官方写法 Jav ...

最新文章

  1. 全球40起黑客攻击或与CIA有关 长角牛黑客组织打卡“上班”
  2. python3.4 使用pymysql 连接mysql数据库
  3. 无法远程连接mssqlserver2005服务器的解决
  4. vuex中各属性的使用
  5. 用 man 命令查看 ls 命令的使用手册_Python学习第167课--用man和info打开Linux命令说明书的区别...
  6. 硬核! BAT 究竟是怎么玩转中台的!
  7. 如何着手分析一个行业?
  8. 犀牛Rhino中Grasshopper插件中的millipede千足虫插件安装方法
  9. ARCGIS空间自相关技术的实现
  10. 大一 C语言 实验1
  11. 第一章 概率与统计介绍--机器学习数学基础
  12. Spring Bean的生命周期自我记忆
  13. 计算机教师的应用计划书,教师信息技术个人提升计划
  14. SAP BTE 增强 物料主数据变更
  15. 谁说Source Insight只能看C盘的文件?我有妙招!
  16. 值得一看的电脑教程下载
  17. 2021夏魔训作业 第三天 2021-07-28
  18. Geometry创建
  19. Codeup——597 | 问题 A: Set Similarity (25)
  20. 虚拟现实在医学领域的应用和发展前景

热门文章

  1. Attempt to invoke virtual method ‘boolean android.graphics.Bitmap.isRecycled()‘
  2. 韦丹塔和富士康投资200亿美元兴建半导体工厂;精密陶瓷3D打印中日合资企业微瓷公司在景德镇成立 | 美通企业日报...
  3. 帮网管省心省力的koomail公共地址薄
  4. Linux——shell
  5. 威锋VL820是USB 3.1 2代集线器控制器
  6. 北漂生活-租房那些事
  7. unity学习———2D人物的移动
  8. 如何用大数据软件确定 数码电子店铺选址
  9. 计算机屏幕的作用是什么情况,电脑屏幕分辨率的作用是什么?
  10. Pandas方法实践-2012美国总统竞选赞助数据分析