将Excel表格中的数据更新到数据库

	在工作中,遇见数据的导入。有的是文本文件,有的是在Excel表格里面的数据。我这次的工作就是讲Excel表中的数据更新到数据的表里面。

需要更新的数据库表里面字段如上图:表A、ADMINSTRATIVE_CODE字段、TAR_TOPONYM字段;

右图为:Excel表格里面的数据                                                                          

业务逻辑:根据Excel表格里面 第二列的数据去遍历 表A中的TAR_TOPONYM字段 找到 值 相等的 数据 去更新A表中 ADMINSTRATIVE_CODE字段;

代码如下:

package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Test07{

  public static void main(String[] args) throws SQLException, ClassNotFoundException{
    // 文件所在路径  
    String execelFile = "D:/asdf.xlsx";
    try {  
      // 构造 Workbook 对象,execelFile 是传入文件路径(获得Excel工作区)  
      Workbook book = null;  
      try {  
          // Excel 2007获取方法  
          book = new XSSFWorkbook(new FileInputStream(execelFile));  
      } catch (Exception ex) {  
          // Excel 2003获取方法  
          book = new HSSFWorkbook(new FileInputStream(execelFile));  
      }  
        
      // 读取表格的第一个sheet页  
      XSSFSheet sheet = (XSSFSheet)book.getSheetAt(0);  
      // 定义 row、cell  
      // 总共有多少行,从0开始  
      int totalRows = sheet.getLastRowNum() ;  
      Class.forName("oracle.jdbc.driver.OracleDriver");  
      //第二步:创建数据库连接  
      Connection con =DriverManager.getConnection("jdbc:oracle:thin:@117.78.35.241:1521:alix", "alix", "alix");
      con.setAutoCommit(false);
      Statement st = con.createStatement();
      int commitCount = 0;
      // 循环输出表格中的内容,首先循环取出行,再根据行循环取出列  
      for (int i = 0; i <= totalRows; i++) {  
        XSSFRow row = sheet.getRow(i);  
          // 处理空行  
          if(row == null){  
              continue ;  
          }  
          // 总共有多少列,从0开始  
          String cell1=null;
          String cell2=null;
          int totalCells = row.getLastCellNum() ;  
          for (int j = row.getFirstCellNum(); j < totalCells; j++) {  
              // 处理空列  
              if(row.getCell(j) == null){  
                  continue ;  
              }  
              // 通过 row.getCell(j).toString() 获取单元格内容  
               cell1=publicExcel(sheet.getRow(i).getCell(0));
               cell2=publicExcel(sheet.getRow(i).getCell(1));
              
          }  
          
          String sql="UPDATE TSYS_PRM_ADDRESS  set ADMINISTRATIVE_CODE = '"+cell1 +"' where "
              + "TAR_TOPONYM='"+cell2+"'";
          //System.out.println(sql);
          st.addBatch(sql);

          if(i > 0 && (i % 100 == 0)){
            System.out.println("100条提交一次!");
            commitCount++;
            try{
              int[] res = st.executeBatch();
              for(int j=0;j<res.length;j++){
                //System.out.println(res[j]);
                  if(res[j]<0){
                    System.out.println(sql);
                  }
              }
              
              con.commit();
            }catch(Exception e){
              e.printStackTrace();
              con.rollback();
            }finally{
              st.clearBatch();
            }
          }
      }  
      System.out.println("提交批次数:"+commitCount);
      st.close();
      con.close();
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    } 
    }
  
  /** 
   * execl数据格式的转换 
   * @param xssfCell 
   * @return 
   */  
  public static String publicExcel( XSSFCell xssfCell){  
      String value = null;          
            switch (xssfCell.getCellType()) {  
            case HSSFCell.CELL_TYPE_NUMERIC:  
             value = "" + xssfCell.getNumericCellValue();  
             break;  
            case HSSFCell.CELL_TYPE_STRING:  
             value = xssfCell.getStringCellValue();  
             break;  
            case HSSFCell.CELL_TYPE_BLANK:  
             ;  
             break;  
            default:   
          }  
      return value;  
  }  
  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值