`
panshaobinSB
  • 浏览: 203028 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jabc bath 与prepareStatement的结合应用

 
阅读更多
String sql = "insert into "
				+ T_PROD
				+ month
				+ "(id,SERV_ID,ACC_NBR,PROD_ID,IS_PHS_TK,CREATE_DATE,CUST_ID,STATE,CITY)"
				+ " values(seq_rep_ogn_prod_id.nextval,?,?,?,?,?,?,?,?)";

		try {
			in = new BufferedReader(new FileReader(d.getPath() + filename));
			conn.setAutoCommit(false);
			pstm = conn.prepareStatement(sql);			String linedata = in.readLine();
			int i = 1;
			Long SERV_ID = null;
			String ACC_NBR = "";
			Long PROD_ID = null;
			String IS_PHS_TK = "";
			java.util.Date date = null;
			Timestamp CREATE_DATE = null;
			Long CUST_ID = null;
			String STATE = "";
			String CITY = "";

			while (linedata != null) {
				String[] data = linedata.split("\\;");
				if (data.length != 7) {
					log("read 第  " + i + "行" + linedata);
					//log("长度不够或超出了。");
				} else {
					try {
						if (data[0].trim().length() != 0) {
							SERV_ID = Long.parseLong(data[0].trim());
						} else {
							SERV_ID = null;
						}
						// SERV_ID = Long.parseLong(data[0].trim());
						ACC_NBR = data[1].trim();
						if (data[2].trim().length() != 0) {
							PROD_ID = Long.parseLong(data[2].trim());
						} else {
							PROD_ID = null;
						}
						// PROD_ID = Long.parseLong(data[2].trim());
						IS_PHS_TK = data[3].trim();

						if (data[4].trim().length() <= 8) {
							date = sim2.parse(data[4].trim());
						} else {
							date = sim.parse(data[4].trim());
						}
						// date = sim.parse(data[4].trim());
						// 存入oracle时间要完整的时间类型得用到Timestamp
						CREATE_DATE = new Timestamp(date.getTime());
						if (data[5].trim().length() != 0) {
							CUST_ID = Long.parseLong(data[5].trim());
						} else {
							CUST_ID = null;
						}
						// CUST_ID = Long.parseLong(data[5].trim());
						STATE = data[6].trim();
						CITY = city.trim();

						if (SERV_ID == null) {
							pstm.setNull(1, java.sql.Types.BIGINT);
						} else {
							pstm.setLong(1, SERV_ID);
						}
						// pstm.setLong(1, SERV_ID);
						pstm.setString(2, ACC_NBR);

						if (PROD_ID == null) {
							pstm.setNull(3, java.sql.Types.BIGINT);
						} else {
							pstm.setLong(3, PROD_ID);						}
						// pstm.setLong(3, PROD_ID);
						pstm.setString(4, IS_PHS_TK);
						pstm.setTimestamp(5, CREATE_DATE);

						if (CUST_ID == null) {
							pstm.setNull(6, java.sql.Types.BIGINT);
						} else {
							pstm.setLong(6, CUST_ID);
						}
						// pstm.setLong(6, CUST_ID);
						pstm.setString(7, STATE);
						pstm.setString(8, CITY);
						
						pstm.addBatch();
						if (i % commitCount == 0 && i != 0) {
							// 利用executeBatch方法执行1000条SQL语句
							pstm.executeBatch();
							pstm.clearBatch();
							conn.commit();						}
					} catch (Exception e) {
						e.printStackTrace();
						log("read 第 " + i + "行  " + linedata);
					}
				}
				i++;
				linedata = in.readLine();
			}
			pstm.executeBatch();
			pstm.clearBatch();
			conn.commit();
			// close(); //关闭资源			in.close();
		} catch (Exception e1) {
			log(e1.getMessage());
		}



上面的代码中最主要的就是几句而已,用来下面的这几句,可以提高上百倍的数据操作插入的效率,

先取消自动commit()这个方法,用下面这句:
conn.setAutoCommit(false);
预编译一下sql语句:
pstm = conn.prepareStatement(sql);
根据sql中的位置来设置相应的参数:
pstm.setLong(3, PROD_ID);
设置完一条就加到bath里面去
pstm.addBatch();
每一千条就提交一次,不然内容会受不了的,1000这个大小可以根据实际内存来设置,
下面这两个方法是在commit()前一定要操作的,因为这样才可以释放掉内存。
pstm.executeBatch();
pstm.clearBatch();
if (i % commitCount == 0 && i != 0) {
// 利用executeBatch方法执行1000条SQL语句
pstm.executeBatch();
pstm.clearBatch();
conn.commit();


pstm.executeBatch();
pstm.clearBatch();
conn.commit();
// close(); //关闭资源

最后一定要关闭数据库连接,不然这个连接会耗费很多资源的。
分享到:
评论
3 楼 rbw204 2012-11-07  
,谢谢博主!
2 楼 panshaobinSB 2012-11-02  
rbw204 写道
博主,我想问一下,如果每一千条提交一次,如果这次的一千条成功执行了,那下次的一千条如果不能成功执行,这个时候怎么办?有什么好的解决办法吗?望赐教!

-------------------------------------------------------------------

像我上面的例子,是从一个文本文件中解析出数据插入数据库的,我可以把提交不成功的一千条数据先写入另一种存储的介质中,我是放在日志里面,那些执行不成功的会被写入日志文件中,那些执行成功提交的就不用写入日志,执行完成后再来处理不正常录入的数据。
1 楼 rbw204 2012-10-30  
博主,我想问一下,如果每一千条提交一次,如果这次的一千条成功执行了,那下次的一千条如果不能成功执行,这个时候怎么办?有什么好的解决办法吗?望赐教!

相关推荐

    jabc.zip_jabc_java mysql查询_java数据库查询_数据库处理

    在Java编程语言中,与MySQL数据库进行交互是常见的任务,特别是在开发Web应用程序或需要存储和检索数据的系统中。"jabc.zip_jabc_java mysql查询_java数据库查询_数据库处理"这个压缩包文件很可能是包含了一个名为...

    jabc.rar_JDBC增删改查_java jdbc

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Employees (id, name, salary) VALUES (?, ?, ?);")) { pstmt.setInt(1, 1001); pstmt.setString(2, "John Doe"); pstmt.setDouble(3, 50000.0);...

    很好的jabc学习笔记

    “很好的Jabc学习笔记”这个资料主要涵盖了JDBC的基础知识,包括如何连接数据库、使用连接池以及基本的异常处理。对于初学者来说,这是了解和掌握Java与数据库交互的一个良好起点。通过深入学习和实践,你可以更好地...

    SqlServer中使用到的jar文件jdbc.jar和jabc4.0.jar

    在SQL Server数据库的Java应用程序开发中,经常需要用到与数据库交互的驱动程序,这些驱动程序通常以JAR(Java Archive)文件的形式存在。标题提到的"jdbc.jar"和"jabc4.0.jar"就是其中的两个关键组件,它们在Java...

    oracle JDBC连接jar文件

    Oracle JDBC(Java Database Connectivity)是Oracle公司提供的Java应用程序与Oracle数据库之间进行通信的接口。它遵循JDBC标准,使得开发者可以使用Java语言编写数据库应用程序,适用于Oracle 10g、11g以及更高版本...

    MS sql 2000 JDBC驱动

    - **预编译PreparedStatement**:使用`java.sql.Connection.prepareStatement()`创建`PreparedStatement`对象,支持参数化查询,提高性能并防止SQL注入攻击。 - **执行查询和更新**:通过`executeQuery()`执行SELECT...

    java与数据库的连接jdbc数据库操作实例

    java与数据库的连接jdbc数据库操作实例 1 连接数据库 创建表 students ID\Name\Major\Telephone 程序中实现执行Sql语句对数据增、删、改、查 2 写一个连接Oracle数据库在T_User表中根据用户名把其中的密码更新成...

    spring-framework-2.5.6.SEC01

    ORM模块则集成了Hibernate、JPA等流行框架,使得对象与数据库表之间的映射更加简单。 对于Web开发,Spring MVC是Spring Framework的重要组成部分。2.5.6.SEC01版本的Spring MVC提供了模型-视图-控制器架构,便于...

    Handbook of Research on Business Process Modeling

    重点关注了如何设计和构建高效的业务流程模型,并将其与jABC的技术特性相结合。 - **应用场景**: 介绍了多个案例研究,展示了如何利用jABC进行流程优化、自动化和管理,特别强调了在复杂业务环境中模型的灵活性和适应性...

    JDBC连接8种数据库的写法

    - **连接字符串解析**:Access数据库的连接方式与其他数据库有所不同,主要通过ODBC进行连接。 - **注意事项**:确保路径正确,并且已经安装了相应的ODBC驱动程序。 ### 总结 以上介绍了通过JDBC连接八种不同类型...

    mysql-connector-java-5.1.26

    这个压缩包包含的是MySQL数据库与Java应用程序之间的桥梁,即MySQL的Java驱动程序(JDBC驱动),全称为Java Database Connectivity驱动。JDBC驱动是Java平台的标准接口,允许Java程序通过编程方式与各种类型的数据库...

    七年级数学下册10.5图形的全等典型例题素材2(新版)华东师大版.pdf

    例如,如果给出"JABC也CADE",那么我们可以依次对应A到A,B到D,C到E,以此类推,找出对应边AB与AD,BC与DE,AC与AE,以及对应角ABC与ADE,ACB与AED,BAC与DAE。 例2中,通过证明两个全等三角形ABC和A'B'C',我们...

    JDBCBulkInsert:如何运行 JDBCBulkInsert 的示例

    JDBC批量插入 有关详细信息,请参阅建造 mvn package 创建表 gpadmin=# create table jdbc_load (a text, b text, c text, d text, e text ); CREATE TABLE 在 /tmp/test.txt 中创建一个 TAB 分隔的文件 ...

    mysql-connector.rar

    MySQL是世界上最受欢迎的开源关系型数据库之一,而`mysql-connector.rar`文件包含了MySQL数据库的Java连接器,这是用于在Java应用程序中与MySQL数据库进行通信的重要组件。此压缩包提供了两个不同版本的驱动:5.1和...

    关于JDBC的详细介绍

    - **JDBC**:可以看作是Java版本的ODBC,专门为Java语言设计,用于实现Java应用程序与不同数据库之间的连接和交互。 #### 三、JDBC的核心特性 - **高度一致性**:JDBC提供了一套标准的API,确保不同的数据库可以...

    mysql oracle JDBC.rar

    MySQL和Oracle都是广泛使用的数据库管理系统,JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的标准API。本资源"mysql oracle JDBC.rar"包含不同版本的MySQL和Oracle数据库的JDBC驱动...

    JAVA Oracle_JDBC

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

    tomcat-jdbc-8.0.47.jar

    Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.0.47/tomcat-jdbc-8.0.47.jar

    软件工程(uml时序图)

    描述中提到的“jabc的连接封装”可能指的是一个数据访问层或者数据库连接管理的组件,它负责处理与数据库的交互,如增加(insert)、删除(delete)、查询(query)和修改(update)等操作。在软件开发中,JDBC...

    JDBC连接SQLServer2008.pp

    jabc课件,让我们简单的理解什么是jdbc和一些库函数。让你有大体了解和认识。

Global site tag (gtag.js) - Google Analytics