public void addFlowCardDetail(String flowCardVouNo,List<FlowCardDetail> flowCardDetailList) throws DaoException {
Connection conn=null;
try{
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//实例名
String url ="jdbc:oracle:thin:@localhost:1521:orcl";
String username="test";
String password = "test";
//关闭自动提交事务
conn.setAutoCommit(false);
//拼接sql语句
StringBuffer sbsql = new StringBuffer();
sbsql.append("insert into t_flow_card_detail (flow_card_no,aim_client_id,");
sbsql.append("item_no,opt_qty,adjust_flay)");
sbsql.append("values (?,?,?)");
PreparedStatement pstmt = null;
//建立连接Connection
conn = DriverManager.getConnection(url,username,password)
//预编译sql语句
pstmt = conn.prepareStatement(sbsql.toString());
for (Iterator<FlowCardDetail> iter = flowCardDetailList.iterator();iter.hasNext();) {
FlowCardDetail flowCardDetail = iter.next();
pstmt.setString(1,flowCardVouNo);
pstmt.setInt(2,flowCardDetail.getAimClient().getId());
pstmt.setString(3,flowCardDetail.getItem().getItemNo());
pstmt.setBigDecimal(4,flowCardDetail.getOptQty());
pstmt.setString(5,flowCardDetail.getAdjustFlag());
//添加一条sql语句,即把一条sql命令添加到命令列表中
pstmt.addBatch();
}
//批量执行sql语句
pstmt.executeBatch();
//提交事务,真正的将操作执行到数据库
conn.commit();
} catch (sqlException e) {
e.printStackTrace();
throw new DaoException(e);
} finally {
ConnectionManager.close(pstmt);
}
}
注释:
1.addBatch():是将若干条sql语句装在一起,添加到prepareStatement对象的当前命令列表中,然后通过executeBatch()一次性的将所有的命令送到数据库执行所有的sql语句;
2.executeUpdate():是将sql语句一条一条的送到数据库执行
3.而数据库单次吞吐量很大,执行效率极高,如果是一条一条的执行,时间都浪费在数据库连接上了。就如饭店做饭一样,需要白菜,胡萝卜,青椒,厨师做每道菜需要5分钟,才从菜市场到饭店需要20分钟,前者相当于把白菜,胡萝卜,青椒一块买然后运动饭店,需要只需35分钟;后者相当于每次只买一样菜,送到饭店,厨师做完后,再去买另一样菜。。。需要75分钟,由此对比,时间都浪费来运菜的路上了,运菜的过程相当于打开连接的过程,做菜的过程相当于执行sql语句的过程
4. 我这演示的是insert语句,批量执行的sql语句,可以是增删改,不能有select
5.使用此种方法,必须要关闭自动提交事务:conn.setAutoCommit(false),减少与数据库的交互
6. addBatch()到一定次数是要及时提交,jdbc批量数据处理的每个批次的限量大概是5w条,否则容易发生内存溢满的问题
7. [JDBC中的Statement和PreparedStatement的区别](http://blog.csdn.net/weixin_36586564/article/details/71213206)
二:利用PL/sql Developer工具将excel中数据批量导入oracle数据库
选择Tools——ODBCImporter,因为我们导入的是excel,所以选择Excel Files
选在Excel所在的路径,选中要导入的Excel,点击确定
在Data from ODBC选项下,双击excel路径,在下面可以预览导入的数据
切换到Data to Oracle选项卡下,填写要导入到哪个数据库的哪张表,必须在Fields中选中一列之后,Import按钮才可用,此时导入的已经是整张excel了,最后点击Import按钮,成功导入
注意事项: