java利用poi读取excel中数据并导入数据库

/ 0评 / 0

因为现在的工作需要把超级多的excel或者cvs文件导入数据库..

之前又没有学过,哎又没有人带,但是为了生活,实习.....

解决办法,利用poi读取excel,在使用sql语句写入数据库...(JDBCUtil可以自己写,我这里测试用mysql,公司用oracle)

不多说代码带上

package comglj.utils;

import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DecimalFormat;  
import java.text.SimpleDateFormat;  
import java.util.LinkedList;  
import java.util.List;  
import org.apache.poi.hssf.usermodel.HSSFCell;  
import org.apache.poi.hssf.usermodel.HSSFDateUtil;  
import org.apache.poi.hssf.usermodel.HSSFRow;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.xssf.usermodel.XSSFCell;  
import org.apache.poi.xssf.usermodel.XSSFRow;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
/** 
 * 读取excel文件 
 * @author GLJ
 *Poi解析2003时使用的是HSSFCell,而2007的则是  
    XSSFCell,是完全不同的两套API 
    必须先要判断excel的类型,不过 HSSFWorkbook 和 XSSFWorkbook 实现的接口都是一样的Workbook
    直接在实例化接口的时候有点区别其他时候没有任何差异。 
 */  
public class ReadExcelUtil {  
    public static List<List<Object>> readExcel(File file) throws IOException {  
        String fileName = file.getName();  
        String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName  
                .substring(fileName.lastIndexOf(".") + 1);  
        if ("xls".equals(extension)) {  
            return read2003Excel(file);  
        } else if ("xlsx".equals(extension)) {  
            return read2007Excel(file);  
        } else {  
            throw new IOException("不支持的文件类型");  
        }  
    }  
  
    /** 
     * 读取 office 2003 excel 
     * @throws IOException 
     * @throws FileNotFoundException 
     */  
    private static List<List<Object>> read2003Excel(File file)  
            throws IOException {  
        List<List<Object>> list = new LinkedList<List<Object>>();  
        HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));  
        HSSFSheet sheet = hwb.getSheetAt(0);  
        Object value = null;  
        HSSFRow row = null;  
        HSSFCell cell = null;  
        int counter = 0;  
      //循环所有的行
        for (int i = sheet.getFirstRowNum(); counter < sheet  
                .getPhysicalNumberOfRows(); i++) {  
//          if(i==0){  
//              //跳过第一行  
//              continue;  
//          }  
            row = sheet.getRow(i);  
            List<Object> linked = new LinkedList<Object>();  
            for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {  
                cell = row.getCell(j);  
                if (cell == null) {  
                    value="无";//导入不能为空  
                    linked.add(value);  
                    //System.out.println(value);  
                    continue;  
                }  
                DecimalFormat df = new DecimalFormat("0");// 格式化 number String  
                                                            // 字符  
                SimpleDateFormat sdf = new SimpleDateFormat(  
                        "yyyy-MM-dd");// 格式化日期字符串  
                DecimalFormat nf = new DecimalFormat("0");// 格式化数字  
                switch (cell.getCellType()) {  
                case XSSFCell.CELL_TYPE_STRING:  
                    value = cell.getStringCellValue();  
                    break;  
                case XSSFCell.CELL_TYPE_NUMERIC:  
                    if ("@".equals(cell.getCellStyle().getDataFormatString())) {  
                        value = df.format(cell.getNumericCellValue());  
                    } else if ("General".equals(cell.getCellStyle()  
                            .getDataFormatString())) {  
                        value = nf.format(cell.getNumericCellValue());  
                    } else {  
                        value = sdf.format(HSSFDateUtil.getJavaDate(cell  
                                .getNumericCellValue()));  
                    }  
                    break;  
                case XSSFCell.CELL_TYPE_BOOLEAN:  
                    value = cell.getBooleanCellValue();  
                    break;  
                case XSSFCell.CELL_TYPE_BLANK:  
                    value = "";  
                    break;  
                default:  
                    value = cell.toString();  
                }  
                if (value == null || "".equals(value)) {  
                    value="null";//导入不能为空  
                }  
                linked.add(value);  
            }  
            list.add(linked);  
        }  
        return list;  
    }  
  
    /** 
     * 读取Office 2007 excel 
     * */  
    private static List<List<Object>> read2007Excel(File file)  
            throws IOException {  
        List<List<Object>> list = new LinkedList<List<Object>>();  
        // 构造 XSSFWorkbook 对象,strPath 传入文件路径  
        XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));  
        // 读取第一章表格内容  
        XSSFSheet sheet = xwb.getSheetAt(0);  
        Object value = null;  
        XSSFRow row = null;  
        XSSFCell cell = null;  
        int counter = 0;  
      //循环所有的行
        for (int i = sheet.getFirstRowNum(); counter < sheet  
                .getPhysicalNumberOfRows(); i++) {  
            if(i==0){  
                //跳过第一行  
                continue;  
            }  
            row = sheet.getRow(i);  
            if (row == null) {  
                 break;  
            }  
            List<Object> linked = new LinkedList<Object>();  
            for (int j = row.getFirstCellNum(); j <row.getLastCellNum(); j++) {  
                cell = row.getCell(j);  
                if (cell == null) {  
                    value="";//导入不能为空  
                    linked.add(value);  
                    continue;  
                }  
                DecimalFormat df = new DecimalFormat("0");// 格式化 number String  
                                                            // 字符  
                SimpleDateFormat sdf = new SimpleDateFormat(  
                        "yyyy-MM-dd");// 格式化日期字符串  
                DecimalFormat nf = new DecimalFormat("0");// 格式化数字  
                switch (cell.getCellType()) {  
                        case XSSFCell.CELL_TYPE_STRING:  
                            value = cell.getStringCellValue();  
                            break;  
                        case XSSFCell.CELL_TYPE_NUMERIC:  

                            if ("@".equals(cell.getCellStyle().getDataFormatString())) {  
                                value = df.format(cell.getNumericCellValue());  
                            } else if ("General".equals(cell.getCellStyle()  
                                    .getDataFormatString())) {  
                                value = nf.format(cell.getNumericCellValue());  
                            } else {  
                                value = sdf.format(HSSFDateUtil.getJavaDate(cell  
                                        .getNumericCellValue()));  
                            }  
                            break;  
                        case XSSFCell.CELL_TYPE_BOOLEAN:  
                            value = cell.getBooleanCellValue();  
                            break;  
                        case XSSFCell.CELL_TYPE_BLANK://空格,空白  
                            value = "";  
                            break;  
                        default:  
                            value = cell.toString();  
                }  
                if (value == null || "".equals(value)) {  
                    value="";//导入不能为空  
                }  
                linked.add(value);  
            }  
            list.add(linked);  
        }  
        return list;  
    }  
  
    public static void main(String[] args) {  
        try {  
            int count=0;  
            //long time1=System.currentTimeMillis();  
            List<List<Object>> list=readExcel(new File("F:\\k1.xlsx"));  
           // System.out.println("读取花费时间:"+(System.currentTimeMillis()-time1)/1000.0);  
              
            for(List<Object> list2 :list){  
                count++;  
//                for(int i=0;i<list2.size();i++){  
//                	System.out.print(list2.get(i)+"\n");  
//                }  
                if(list2.size()>4){
                    String id = list2.get(0).toString();
                	String tac = list2.get(1).toString();
                	String host = list2.get(2).toString();
                	String is_reg = list2.get(3).toString();
                	String host_id = list2.get(4).toString();
                	//System.out.println(id+"--"+tac+"--"+host+"--"+is_reg+"--"+host_id);
                	String sql = "insert into wdig_iot_tac_rule(ID,TAC,HOST,IS_REG,HOST_ID) values(?,?,?,?,?)";
                	try {
            			Connection conn = JDBCUtil.getConnection();
            			PreparedStatement ps = conn.prepareStatement(sql);
            			ps.setString(1, id);
            			ps.setString(2, tac);
            			ps.setString(3, host);
            			ps.setString(4, is_reg);
            			ps.setString(5, host_id);
            			ps.execute();
            		} catch (SQLException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		}
                }
                if(list2.size()==4){
                	String id = list2.get(0).toString();
                	String tac = list2.get(1).toString();
                	String host = list2.get(2).toString();
                	String is_reg = list2.get(3).toString();
                	String host_id = null;
                	String sql = "insert into wdig_iot_tac_rule(ID,TAC,HOST,IS_REG,HOST_ID) values(?,?,?,?,?)";
                	try {
            			Connection conn = JDBCUtil.getConnection();
            			PreparedStatement ps = conn.prepareStatement(sql);
            			ps.setString(1, id);
            			ps.setString(2, tac);
            			ps.setString(3, host);
            			ps.setString(4, is_reg);
            			ps.setString(5, host_id);
            			ps.execute();
            		} catch (SQLException e) {
            			// TODO Auto-generated catch block
            			e.printStackTrace();
            		}
                }
            }  
            //System.out.println("ok!");  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注