创建网站哪个好,郑州公司网站,seo推广什么意思,网站开发公司如何拓展业务“大家好#xff0c;我是雄雄#xff0c;欢迎关注微信公众号#xff1a;雄雄的小课堂”前言现在是#xff1a;2022年5月20日09:32:38今天遇到了个这样的需求#xff0c;解析excel表中的数据#xff0c;以JDBC的方式#xff0c;将数据批量更新至不同的数据表中。注意我是雄雄欢迎关注微信公众号雄雄的小课堂”前言现在是2022年5月20日09:32:38今天遇到了个这样的需求解析excel表中的数据以JDBC的方式将数据批量更新至不同的数据表中。注意更新指的是如果数据表中有该条记录则更新操作如果没有则新增操作。实现思路解析Excel直接写了个工具类先看一下代码在做说明/*** 解析excel表格每行数据分别插入到两个表中巡查的视频表* 已经执行完成* 2022年5月12日21:22:01** ↓执行情况如下↓* 一共有这么多行88* **************开始执行************** *************执行完毕******************集合的长度是88* equipment表的添加情况88* disanfangvedio表的添加情况88**/public static void updateBaseEquipmentAndBaseDiSanFangVedio(){String excelPath System.getProperty(user.dir) /ruoyi-admin/src/main/java/zhengshiflowstuisong519.xlsx;try {//String encoding GBK;File excel new File(excelPath);//判断文件是否存在if (excel.isFile() excel.exists()) {//.是特殊字符需要转义String[] split excel.getName().split(\\.);Workbook wb;//根据文件后缀xls/xlsx进行判断if (xls.equals(split[1])) {//文件流对象FileInputStream fis new FileInputStream(excel);wb new HSSFWorkbook(fis);} else if (xlsx.equals(split[1])) {wb new XSSFWorkbook(excel);} else {System.out.println(文件类型错误!);return;}//开始解析// 读取sheet 0Sheet sheet wb.getSheetAt(0);//第一行是列名所以不读int firstRowIndex sheet.getFirstRowNum() 1;int lastRowIndex sheet.getLastRowNum();System.out.println(一共有这么多行lastRowIndex);System.out.println(**************开始执行**************);//将信息放在集合里面添加的时候好处理ListEquipmentAndDiSanFangVedioEntity equipmentAndDiSanFangVedioEntityListList new ArrayList();//遍历行for (int rIndex firstRowIndex; rIndex lastRowIndex; rIndex) {//初始化对象EquipmentAndDiSanFangVedioEntity equipmentAndDiSanFangVedioEntity new EquipmentAndDiSanFangVedioEntity();BaseEquipment baseEquipment new BaseEquipment();BaseDisanfangvedio baseDisanfangvedio new BaseDisanfangvedio();//不会重复吧String uuid IdUtils.fastSimpleUUID();System.out.print(rIndex);Row row sheet.getRow(rIndex);if (row ! null) {DataFormatter dataFormatter new DataFormatter();//regionkeyCell cell_regionkey row.getCell(0);double cell_regionkey_double Double.parseDouble(cell_regionkey.toString());Long regionkey (long)cell_regionkey_double;baseEquipment.setDeptId(regionkey);baseDisanfangvedio.setRegionkey(regionkey);baseDisanfangvedio.setVenueId(regionkey.toString());//equipment_nameCell cell_equipment_name row.getCell(1);String equipment_name dataFormatter.formatCellValue(cell_equipment_name);baseEquipment.setEquipmentCode(equipment_name);baseDisanfangvedio.setEquipmentName(equipment_name);//province_idCell cell_province_id row.getCell(2);String province_id dataFormatter.formatCellValue(cell_province_id);baseDisanfangvedio.setProvinceId(province_id);//city_idCell cell_city_id row.getCell(3);String city_id dataFormatter.formatCellValue(cell_city_id);baseDisanfangvedio.setCityId(city_id);//district_idCell cell_district_id row.getCell(4);String district_id dataFormatter.formatCellValue(cell_district_id);baseDisanfangvedio.setDistrictId(district_id);//venue_idCell cell_venue_id row.getCell(5);String venue_id dataFormatter.formatCellValue(cell_venue_id);//摄像机名称Cell cell_openArea row.getCell(6);String openArea dataFormatter.formatCellValue(cell_openArea);baseEquipment.setEquipmentName(openArea);baseEquipment.setLocation(openArea);//real_time_video_addressCell cell_real_time_video_address row.getCell(7);String real_time_video_address dataFormatter.formatCellValue(cell_real_time_video_address);baseDisanfangvedio.setRealTimeVideoAddress(real_time_video_address);baseEquipment.setBrandId(宇视);baseEquipment.setTypeId(1);baseEquipment.setIpAddress(uuid);baseEquipment.setStateId(0);baseEquipment.setOnlineDate(new Date());baseEquipment.setIsCoreArea(1);baseEquipment.setIsExamine(0);baseDisanfangvedio.setDeviceId(uuid);baseDisanfangvedio.setCreateTime(new Date());equipmentAndDiSanFangVedioEntity.setBaseEquipment(baseEquipment);equipmentAndDiSanFangVedioEntity.setBaseDisanfangvedio(baseDisanfangvedio);//添加到集合里面equipmentAndDiSanFangVedioEntityListList.add(equipmentAndDiSanFangVedioEntity);}}System.out.println(*************执行完毕******************\n集合的长度是equipmentAndDiSanFangVedioEntityListList.size());System.out.println(请稍等…………);System.out.println(正在插入到数据库…………);System.out.println(再等等…………);//调用更新的方法ZhiXingMysqlNew zhiXingMysqlNew new ZhiXingMysqlNew();//暂时先注释掉怕误调用此方法 2022年5月18日17:05:28zhiXingMysqlNew.updateBaseEquipmentAndBaseDiSanFangVedio(equipmentAndDiSanFangVedioEntityListList);System.out.println(插入完毕);} else {System.out.println(找不到指定的文件);}} catch (Exception e) {e.printStackTrace();}}代码说明此类专门用作解析Excel文件将每列需要用到的信息解析之后放在集合中更新时需要用调用更新的方法进行更新操作更新操作这个方法是专门用来更新操作的实现思路根据指定的条件查询数据表中该记录是否存在必须是唯一的可以多个条件组合如果有记录则执行更新操作如果没有记录则执行添加操作均采用JDBC批量更新的方式addBatch、executeBatch、clearBatch最后关闭流代码如下/*** 更新base_equipment表和base_disanfangvedio表* 1.先去视频表里面查询是否有记录* 2.如果有记录则更新视频表* 3.如果没有记录则两个表都插入一条记录* 4.判断地址是否为空如果是空则值给设备表中插入数据* ** param equipmentAndDiSanFangVedioEntityList*/public void updateBaseEquipmentAndBaseDiSanFangVedio(ListEquipmentAndDiSanFangVedioEntity equipmentAndDiSanFangVedioEntityList) {Connection connection connection getConnection();//添加PreparedStatement pStatementEquInsert null;PreparedStatement pStatementDsfInsert null;//修改PreparedStatement pStatementEquUpdate null;PreparedStatement pStatementDsfUpdate null;//查询PreparedStatement pStatementEquipmentSelect null;ResultSet rs null;try {//先根据场馆id和点位名称查询信息String sqlEquipmentSelect SELECT * FROM base_equipment WHERE dept_id ? AND equipment_name ?;//新增的sql语句String sqlEquipmentInsert INSERT INTO base_equipment \n ( equipment_code, equipment_name,dept_id, \n location, brand_id, type_id, ip_address, \n state_id, \n online_date, is_core_area,is_examine ) \n VALUES ( ?,?,?,?,?,?,?,?,?,?,?);String sqlBaseDisanFangVedioInsert INSERT INTO base_disanfangvedio \n ( regionkey, equipment_name, province_id,\n city_id, district_id, venue_id, real_time_video_address, \n device_id, create_time) \n VALUES (?, ?,?, ?, ?, ?, ?, ?, ?);//修改的sql语句String sqlEquipmentUpdate UPDATE base_equipment SET equipment_code ?, equipment_name ?, dept_id ?, location ?, brand_id ?, type_id ?, state_id ?, online_date ?, is_core_area ?, is_examine ? WHERE ip_address ?;String sqlBaseDisanFangVedioUpdate UPDATE base_disanfangvedio SET regionkey ?, equipment_name ?, province_id ?, city_id ?, district_id ?, venue_id ?, real_time_video_address ?, create_time ? WHERE device_id ?;SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//添加的pStatementEquInsert connection.prepareStatement(sqlEquipmentInsert);pStatementDsfInsert connection.prepareStatement(sqlBaseDisanFangVedioInsert);//修改的pStatementEquUpdate connection.prepareStatement(sqlEquipmentUpdate);pStatementDsfUpdate connection.prepareStatement(sqlBaseDisanFangVedioUpdate);//查询的pStatementEquipmentSelect connection.prepareStatement(sqlEquipmentSelect);//批量插入数据for (EquipmentAndDiSanFangVedioEntity equipmentAndDiSanFangVedioEntity : equipmentAndDiSanFangVedioEntityList) {//先根据场馆id和点位名称查询信息pStatementEquipmentSelect.setObject(1, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getDeptId());pStatementEquipmentSelect.setObject(2, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getEquipmentName());rs pStatementEquipmentSelect.executeQuery();if (rs.next()) {//找到了结果了说明已经存在了不需要插入需要更新//获取唯一标识String ipAddress rs.getString(ip_address);//更新//equipment表pStatementEquUpdate.setString(1, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getEquipmentCode());pStatementEquUpdate.setString(2, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getEquipmentName());pStatementEquUpdate.setLong(3, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getDeptId());pStatementEquUpdate.setString(4, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getLocation());pStatementEquUpdate.setString(5, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getBrandId());pStatementEquUpdate.setString(6, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getTypeId());pStatementEquUpdate.setString(7, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getStateId());pStatementEquUpdate.setString(8, simpleDateFormat.format(equipmentAndDiSanFangVedioEntity.getBaseEquipment().getOnlineDate()));pStatementEquUpdate.setInt(9, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getIsCoreArea());pStatementEquUpdate.setString(10, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getIsExamine());pStatementEquUpdate.setString(11, ipAddress);//disanfangvedio表pStatementDsfUpdate.setLong(1, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getRegionkey());pStatementDsfUpdate.setString(2, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getEquipmentName());pStatementDsfUpdate.setString(3, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getProvinceId());pStatementDsfUpdate.setString(4, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getCityId());pStatementDsfUpdate.setString(5, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getDistrictId());pStatementDsfUpdate.setString(6, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getVenueId());pStatementDsfUpdate.setString(7, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getRealTimeVideoAddress());pStatementDsfUpdate.setString(8, simpleDateFormat.format(equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getCreateTime()));pStatementDsfUpdate.setString(9, ipAddress);//批量修改pStatementEquUpdate.addBatch();pStatementDsfUpdate.addBatch();} else {//没有找到结果插入数据//equipment表pStatementEquInsert.setString(1, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getEquipmentCode());pStatementEquInsert.setString(2, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getEquipmentName());pStatementEquInsert.setLong(3, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getDeptId());pStatementEquInsert.setString(4, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getLocation());pStatementEquInsert.setString(5, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getBrandId());pStatementEquInsert.setString(6, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getTypeId());pStatementEquInsert.setString(7, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getIpAddress());pStatementEquInsert.setString(8, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getStateId());pStatementEquInsert.setString(9, simpleDateFormat.format(equipmentAndDiSanFangVedioEntity.getBaseEquipment().getOnlineDate()));pStatementEquInsert.setInt(10, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getIsCoreArea());pStatementEquInsert.setString(11, equipmentAndDiSanFangVedioEntity.getBaseEquipment().getIsExamine());//批量添加pStatementEquInsert.addBatch();//判断视频地址是否为空// if(Strings.isNotBlank( equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getRealTimeVideoAddress())){//不为空的话需要给视频表里面维护数据//disanfangvedio表pStatementDsfInsert.setLong(1, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getRegionkey());pStatementDsfInsert.setString(2, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getEquipmentName());pStatementDsfInsert.setString(3, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getProvinceId());pStatementDsfInsert.setString(4, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getCityId());pStatementDsfInsert.setString(5, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getDistrictId());pStatementDsfInsert.setString(6, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getVenueId());pStatementDsfInsert.setString(7, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getRealTimeVideoAddress());pStatementDsfInsert.setString(8, equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getDeviceId());pStatementDsfInsert.setString(9, simpleDateFormat.format(equipmentAndDiSanFangVedioEntity.getBaseDisanfangvedio().getCreateTime()));//批量添加pStatementDsfInsert.addBatch();// }}}//批量添加操作int[] pStatementEquCounts pStatementEquInsert.executeBatch();int[] pStatementDsfCounts pStatementDsfInsert.executeBatch();//批量修改操作int[] pStatementEquUpdateCounts pStatementEquUpdate.executeBatch();int[] pStatementDsfUpdateCounts pStatementDsfUpdate.executeBatch();System.out.println(批量添加的情况equipment表 pStatementEquCounts.lengthdisanfangvedio表pStatementDsfCounts.length);System.out.println(批量修改的情况equipment表 pStatementEquUpdateCounts.lengthdisanfangvedio表pStatementDsfUpdateCounts.length);//批量clearpStatementEquInsert.clearBatch();pStatementDsfInsert.clearBatch();pStatementEquUpdate.clearBatch();pStatementDsfUpdate.clearBatch();} catch (Exception e) {e.printStackTrace();} finally {closeResultSet(rs);closePreparedStatement(pStatementEquInsert);closePreparedStatement(pStatementDsfInsert);closePreparedStatement(pStatementEquUpdate);closePreparedStatement(pStatementDsfUpdate);closePreparedStatement(pStatementEquipmentSelect);closeConnection(connection);}}注意事项类似这种直接操作数据表的一定要先把表备份一下安全起见excel表格中先只保留一行数据解析导入没有问题的话在导入整个表一定要-先备份先备份先备份