excel导入数据库oracle
程序员文章站
2022-05-13 20:39:27
...
1.读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可
import java.io.FileInputStream; 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.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * @author 作者:gzh * @version 创建时间:2015-4-30上午11:26:13 * 类说明: * 1.读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可 * 2.应用的jar包是apache的poi系类的jar包和 * 3.ojdbc14.jar的数据库连接包。 **/ public class ExeclOperateMain { /** * 方法说明: * @param args * @return void */ public static void main(String[] args) throws Exception { ExeclOperateMain e=new ExeclOperateMain(); e.getExcel(); System.out.println("Execl导入完成!"); } /** * 用于连接oracle数据库的方法 * 只需修改中的参数getConnection("url","用户名","密码"); */ public Connection conn(){ try { //第一步:加载JDBC驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //第二步:创建数据库连接 Connection con =DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.202:1521:orcl", "mdb", "mdb"); return con; }catch(ClassNotFoundException cnf){ System.out.println("驱动未找到!:"+cnf); return null; }catch(SQLException sqle){ System.out.println("不能连接数据库:"+sqle); return null; } catch (Exception e) { System.out.println("加载失败 JDBC/ODBC driver."); return null; } } /** * excel表 的读取 * @throws Exception */ public void getExcel() throws Exception { // 创建对Excel工作簿文件的引用 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("E:\\Workspaces\\pt-zt-v1.0\\src\\test.xls")); // 创建对工作表的引用。 // 在Excel文档中,第一张工作表的缺省索引是0, // 读取左上端单元 for (int i = 0; i < workbook.getNumberOfSheets(); i++) {// 循环sheet,3列 if(workbook.getSheetAt(i).getPhysicalNumberOfRows()>0){//行,6行 HSSFSheet childSheet = workbook.getSheetAt(i); for(int rowi=1;rowi<40000;rowi++){ // || childSheet.getRow(rowi).getCell(0).equals("") || childSheet.getRow(rowi).getCell(0)==null if(childSheet.getRow(rowi)==null) break; String cell1=this.publicExcel(childSheet.getRow(rowi).getCell(0)); if(cell1==null) break; //对于double类型的数据装换为string类型进行字符串截取 只取整数。 cell1=cell1.substring(0, cell1.length()-2);//2 String cell2=this.publicExcel(childSheet.getRow(rowi).getCell(1));//111 String cell3=this.publicExcel(childSheet.getRow(rowi).getCell(2));//422 //拼装插入数据库的sql String insert="insert into pt_zt values('"+cell3+"','"+cell2+"','"+cell1+"')"; System.out.println("SQL:"+insert); insert(insert); } } } } /** * execl数据格式的转换 * @param cell * @return String */ public String publicExcel( HSSFCell cell){ String value = null; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: value = "" + cell.getNumericCellValue(); break; case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: ; break; default: } return value; } /** * 插入数据 只需要传入插入sql即可 * 插入sql的样例:insert into pt_zt values('sys_users','用户表'); * @param insert 插入语句 * @return int * @throws SQLException */ public int insert(String insert) throws SQLException{ Connection conn = this.conn(); int re = 0; try{ conn.setAutoCommit(false);//事物开始 Statement sm = conn.createStatement(); re = sm.executeUpdate(insert);//执行 if(re < 0){ //插入失败 conn.rollback(); //回滚 sm.close(); //关闭sm conn.close(); //关闭连接 return re; } conn.commit(); //插入提交正常 System.out.println("一条已插入正常,sql="+insert); sm.close(); conn.close(); return re; } catch(Exception e){ e.printStackTrace(); } conn.close(); return 0; } }