mysql批量插入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql批量插入相关的知识,希望对你有一定的参考价值。

 说明下在建Statement的时候,后面两个参数的意义: 
 
第一个参数指定 ResultSet 的类型。其选项有: 
TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。 
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改              的影响。 
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 Re              sultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。 
              第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有: 
CONCUR_READ_ONLY:这是缺省值,指定不可以更新 
ResultSet CONCUR_UPDATABLE:指定可以更新 ResultSet


1
public void save(List<Item> itemList) { 2 3 try { 4 Connection conn = JdbcUtils.getConnection(); 5 String sql = "INSERT INTO `rbyair_trace`.`trace_info` (`track_id`, `member_id`, `mid`, `session_id`, `user_ip`, `opsystem`, `phone_m                 odel`, `app_name`, `app_version`, `campain_id`, `page_context`, `web_version`, `source_channel`, `start_from`, `banne                 r_index`, `activity_id`, `category_id`, `list_index`, `pin_id`, `target_pinid`, `group_id`, `share_target`, `share_us                 erid`, `joinuser_id`, `order_id`, `goods_id`, `pay_type`, `order_type`, `url`, `phone_time`, `trace_time`) VALUES (?,                 ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 6 conn.setAutoCommit(false); 7 PreparedStatement ps = conn 8 .prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, 9 ResultSet.CONCUR_READ_ONLY); 10 int count = 0; 11 for (Item item : itemList) { 12 if (item.getTrackId()==null) { 13 logger.error("该条数据没有买点ID"+item.toString()); 14 continue; 15 } 16 ps.setString(1, item.getTrackId()); 17 ps.setInt(2, item.getMemberId()); 18 ps.setString(3, item.getMid()); 19 ps.setString(4, item.getSessionId()); 20 ps.setString(5, item.getUserIp()); 21 ps.setString(6, item.getOpsystem()); 22 ps.setString(7, item.getPhoneModel()); 23 ps.setString(8, item.getAppName()); 24 ps.setString(9, item.getAppVersion()); 25 ps.setString(10, item.getCampainId()); 26 ps.setString(11, item.getPageContext()); 27 ps.setString(12, item.getWebVersion()); 28 ps.setString(13, item.getSourceChannel()); 29 ps.setString(14, item.getStartFrom()); 30 ps.setInt(15, item.getBannerIndex()); 31 ps.setInt(16, item.getActivityId()); 32 ps.setInt(17, item.getCategoryId()); 33 ps.setInt(18, item.getListIndex()); 34 ps.setInt(19, item.getPinId()); 35 ps.setInt(20, item.getTargetPinid()); 36 ps.setInt(21, item.getGroupId()); 37 ps.setInt(22, item.getShareTarget()); 38 ps.setInt(23, item.getShareUserid()); 39 ps.setInt(24, item.getJoinuserId()); 40 ps.setLong(25, item.getOrderId()); 41 ps.setLong(26, item.getGoodsId()); 42 ps.setInt(27, item.getPayType()); 43 ps.setInt(28, item.getOrderType()); 44 ps.setString(29, item.getUrl()); 45 ps.setTimestamp(30, item.getPhoneTime()); 46 ps.setTimestamp(31, item.getTraceTime()); 47 48 ps.addBatch(); 49 count++; 50 if (count % 10000 == 0) { 51 // 1W条一提交 52 ps.executeBatch(); 53 conn.commit(); 54 count = 0; 55 } 56 } 57 ps.executeBatch(); 58 conn.commit(); 59 ps.clearBatch(); 60 } catch (SQLException e) { 61 logger.error("插入数据错误" + e.getMessage()); 62 }

 

以上是关于mysql批量插入的主要内容,如果未能解决你的问题,请参考以下文章

MySql批量插入与唯一索引问题

mysql批量插入数据

mysql批量插入数据

向mysql中批量插入数据的性能分析

mybatis mysql 批量插入

MySQLのmybatis批量插入数据