【Oracle】将数据批量导入到Oracle数据库
发布时间:2020-12-12 14:03:45 所属栏目:百科 来源:网络整理
导读:一:利用addBatch()和executeBatch()批量插入数据 public void addFlowCardDetail(String flowCardVouNo,ListFlowCardDetail flowCardDetailList) throws DaoException { Connection conn=null ; try{ //加载驱动 Class .forName ( "oracle.jdbc.driver.Oracl
一:利用addBatch()和executeBatch()批量插入数据
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按钮,成功导入 注意事项:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 如何在OpenFileDialog窗口中隐藏功能和可选文件夹/驱
- Flash Builder 4.6 Mac 安装
- sqlite3 导出成报表
- Swift详解之五-----------map,filter,reduce
- 设置地图控件的crosshair样式 彻底删除Esri的logo
- 关于生成xml表格: HSSFWorkbook的用法
- iphone – 软件包标识符和配置文件
- flutter – 使用不包含导航器的上下文请求导航器操作
- react-router – 在具有动态道具的同时测试链接组件的href值
- ruby-on-rails – 使用Bundler和Capistrano部署Rails 3 App