java把excel資料寫入Oracle資料庫(.xls檔案)
阿新 • • 發佈:2019-01-11
java把excel資料寫入Oracle資料庫,此處需要引入兩個檔案:ojdbc14.jar,jxl-2.6.10.jar,首先在oracle建立表exceltest,excel檔案內容與其對應,此處注意:(excel版本太高了 報錯:Exception in thread "main" jxl.read.biff.BiffException: Unable to recognize,把檔案儲存成excel 97-2003即可)
1.建表
-- Create table create table EXCELTEST ( line1 VARCHAR2(20), line2 VARCHAR2(20), line3 VARCHAR2(20), line4 VARCHAR2(20) )
2.準備好的excel內容(excel 97-2003)
3.java檔案:
package excel; import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * excel資料匯入到oracle * @author * */ public class excelToOracle { public static void main(String[] args) throws Exception { excelToOracle in = new excelToOracle(); in.insert("F:/test.xls","exceltest"); } /** * * @param path * 要解析的excel檔案路徑 * @param dataTable * 要寫入到資料庫中的表名 * @throws BiffException * @throws IOException */ public void insert(String path,String dataTable) throws BiffException, IOException { File file = new File(path); // 建立新的Excel 工作簿 Workbook rwb = null; rwb = Workbook.getWorkbook(file); // 得到工作簿中的第一個表索引即為excel下的sheet1,sheet2,sheet3... Sheet sheet = rwb.getSheets()[0]; int rsColumns = sheet.getColumns();// 列數 int rsRows = sheet.getRows();// 行數 String simNumber = "" ;//每個單元格中的資料 DBUtils jdbc=new DBUtils(); String str="";//拼接要插入的列 for (int j = 0; j <rsColumns; j++) { Cell cell = sheet.getCell(j, 0); simNumber = cell.getContents(); if(j==rsColumns-1){ str += simNumber ; }else{ str += simNumber+","; } } for (int i = 1; i < rsRows; i++) { String sql = "insert into "+dataTable+"("+str+") values(";//拼接sql System.out.println(str); for (int j = 0; j < rsColumns; j++) { Cell cell = sheet.getCell(j, i); simNumber = cell.getContents(); if(j==rsColumns-1){ sql += "'"+ simNumber+"'" ; }else{ sql +="'"+ simNumber+"',"; } } sql += " )"; jdbc.executeUpdate(sql);//執行sql } jdbc.closeStmt(); jdbc.closeConnection(); } }
工具類:
package excel; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Oracle資料庫連線 * * @author */ public class DBUtils { private Connection conn = null; private Statement stmt = null; private ResultSet rs = null; /** Oracle資料庫連線 URL */ private final static String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl"; /** Oracle資料庫連線驅動 */ private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver"; /** 資料庫使用者名稱 */ private final static String DB_USERNAME = "caiyl"; /** 資料庫密碼 */ private final static String DB_PASSWORD = "123456"; /** * 獲取資料庫連線 * * @return */ public Connection getConnection() { /** 宣告Connection連線物件 */ Connection conn = null; try { /** 使用 Class.forName()方法自動建立這個驅動程式的例項且自動呼叫DriverManager來註冊它 */ Class.forName(DB_DRIVER); /** 通過 DriverManager的getConnection()方法獲取資料庫連線 */ conn = DriverManager .getConnection(DB_URL, DB_USERNAME, DB_PASSWORD); stmt = conn.createStatement(); } catch (Exception ex) { ex.printStackTrace(); } return conn; } /** * 查詢資料部分 * * @return ResultSet */ public ResultSet executeQuery(String sqlStr) { if (sqlStr == null || sqlStr.length() == 0) return null; try { this.getConnection(); rs = stmt.executeQuery(sqlStr); return rs; } catch (SQLException ex) { ex.printStackTrace(); return null; } } /** * 更新資料部分 * * @return 更新是否成功 */ public boolean executeUpdate(String sqlStr) { if (sqlStr == null || sqlStr.length() == 0) return false; try { this.getConnection(); stmt.executeUpdate(sqlStr); return true; } catch (SQLException ex) { ex.printStackTrace(); return false; } finally { try { if (stmt != null) { stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } public void closeStmt() { try { if (stmt != null) { stmt.close(); } } catch (Exception e) { e.printStackTrace(); } } /** * 關閉資料庫連線 * * @param connect */ public void closeConnection() { try { if (conn != null) { /** 判斷當前連線連線物件如果沒有被關閉就呼叫關閉方法 */ if (!conn.isClosed()) { conn.close(); } } } catch (Exception ex) { ex.printStackTrace(); } } }
4.執行效果,檢視資料庫表: