ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA-预处理&连接池技术

2019-08-18 19:05:30  阅读:233  来源: 互联网

标签:10 jdbc JAVA mysql new amp true 预处理 连接池


开发环境

mysql
eclipse
JAR包
	mysql-connector-java-5.1.7-bin.jar
	mchange-commons-java-0.2.11.jar
	c3p0-0.9.5.2.jar

同步100w数据只需22秒
code如下:

public class MyClassTest {
	public static void main(String[] args) throws Exception{
		MyConnect	myConn= new MyConnect("mysql_afschool");
		List<String[]> select= myConn.select("select * from student");
		
		
		
		ComboPooledDataSource pool = new ComboPooledDataSource("mysql_afschool");
		Connection conn = pool.getConnection();
		conn.setAutoCommit(false);//关闭自动提交
		String  insert_sql=myConn.preInsert("student_copy");

		PreparedStatement psts = conn.prepareStatement(insert_sql);
		 
		 
		 int count =0;
		 
	       SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间 
	        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");// a为am/pm的标记  
	        Date date1 = new Date();// 获取当前时间 
	        System.out.println("开始时间:" + sdf.format(date1)); // 输出已经格式化的现在时间(24小时制) 
		 
		 for (int n=0;n<=35000;n++) { //插入1400数据 看看卡需要多久
		 for(String[] str:select) {
		 for(int i=0;i<str.length;i++) {
			 psts.setString(i+1, str[i]);
		 }
		 psts.addBatch(); 
		 count++;
		 }
	}
		 psts.executeBatch();
		 conn.commit();//提交
	        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");// a为am/pm的标记  
	        Date date2 = new Date();// 获取当前时间 
	        System.out.println("结束时间:" + sdf.format(date2) +"\n同步记录数" + count); // 输出已经格式化的现在时间(24小时制) 
	        conn.close();
	        
	}
}

c3p0-config.xml 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>  
        <property name="initialPoolSize">10</property>  
        <property name="maxIdleTime">30</property>  
        <property name="maxPoolSize">100</property>  
        <property name="minPoolSize">10</property>  
        <property name="maxStatements">200</property>  
    </default-config>  
  

	
 <!--配置连接池mysql1-->
    <named-config name="mysql_afschool">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- mysql 开启mysql的批写入,预处理 useServerPrepStmts=true&amp;rewriteBatchedStatements=true-->
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1/af_school?useUnicode=true&amp;useServerPrepStmts=true&amp;rewriteBatchedStatements=true&amp;characterEncoding=UTF-8</property>     
        <property name="user">root</property>
        <property name="password">Ldd123456</property>

	    <property name="initialPoolSize">2</property>
	    <property name="minPoolSize">2</property>
	    <property name="maxPoolSize">10</property>
	    <property name="maxIdleTime">30</property>
	    <property name="idleConnectionTestPeriod">200</property>	    
	 </named-config>  
   
	 <!--配置连接池mysql2-->
	   <named-config name="mysql_target_db">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1/target_db?useUnicode=true&amp;characterEncoding=UTF-8</property>     
        <property name="user">root</property>
        <property name="password">Ldd123456</property>

	    <property name="initialPoolSize">2</property>
	    <property name="minPoolSize">2</property>
	    <property name="maxPoolSize">10</property>
	    <property name="maxIdleTime">30</property>
	    <property name="idleConnectionTestPeriod">200</property>	 
	</named-config> 		


 <!--		注意:XML里的&号须转义为 &amp; 
		其中,
		initialPoolSize 初始连接个数。当连接池创建时,立即准备几个连接,放到池子里
		minPoolSize 池子里最少连接个数
		maxPoolSize 池子里最多有多少连接。当到达此数时,再通过getConnection() 时将会阻塞、直到有可用的连接
		maxIdleTime 最大空闲时间。当一个连接建立后、长时间未用时,会被连接池自动关闭多余的连接。连接池最会少保留 minPoolSize 个可用连接。
		idleConnectionTestPeriod 为了防止发呆而被MySQL服务器踢掉,定时向服务器发送测试消息、以声明自己的存在。
		
		比如,minPoolSize设置为2,则池子里至少保留2个可用连接。即使程序不作任何这个操作,这两个连接也不会被关闭。但是,如果超过8个小时未操作,则此连接会因为‘发呆’会被MySQL踢掉。
		
		所以,为了避免被踢,要设置定时给向服务器发一个消息以证明自己没死。idleConnectionTestPeriod 就是这个定时的间隔。
-->
	
</c3p0-config>

标签:10,jdbc,JAVA,mysql,new,amp,true,预处理,连接池
来源: https://blog.csdn.net/weixin_43467792/article/details/99707651

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有