java把excel數據寫入Oracle數據庫(.xls文件)(轉)

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.建表

[sql] view plain copy
  1. -- Create table  
  2. create table EXCELTEST  
  3. (  
  4.   line1 VARCHAR2(20),  
  5.   line2 VARCHAR2(20),  
  6.   line3 VARCHAR2(20),  
  7.   line4 VARCHAR2(20)  
  8. )  

2.準備好的excel內容(excel 97-2003)


3.java文件:

[java] view plain copy
  1. package excel;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import jxl.Cell;  
  7. import jxl.Sheet;  
  8. import jxl.Workbook;  
  9. import jxl.read.biff.BiffException;  
  10.   
  11. /**  
  12.  * excel數據導入到oracle  
  13.  * @author  
  14.  *  
  15.  */    
  16. public class excelToOracle {    
  17.     public static void main(String[] args) throws Exception {    
  18.     
  19.         excelToOracle in = new excelToOracle();    
  20.         in.insert("F:/test.xls","exceltest");    
  21.     
  22.     }    
  23.     
  24.     /**  
  25.      *   
  26.      * @param path  
  27.      *            要解析的excel文件路徑  
  28.       * @param dataTable  
  29.      *            要寫入到數據庫中的表名            
  30.      * @throws BiffException  
  31.      * @throws IOException  
  32.      */    
  33.     public void insert(String path,String dataTable) throws BiffException, IOException {    
  34.             
  35.         File file = new File(path);             
  36.         // 創建新的Excel 工作簿    
  37.         Workbook rwb = null;    
  38.         rwb = Workbook.getWorkbook(file);    
  39.             
  40.         // 得到工作簿中的第一個表索引即爲excel下的sheet1,sheet2,sheet3...    
  41.         Sheet sheet = rwb.getSheets()[0];    
  42.         int rsColumns = sheet.getColumns();// 列數    
  43.         int rsRows = sheet.getRows();// 行數    
  44.         String simNumber = "" ;//每個單元格中的數據    
  45.             
  46.         DBUtils jdbc=new DBUtils();    
  47.             
  48.         String str="";//拼接要插入的列    
  49.             for (int j = 0; j <rsColumns; j++) {    
  50.                 Cell cell = sheet.getCell(j, 0);    
  51.                 simNumber = cell.getContents();    
  52.                 if(j==rsColumns-1){    
  53.                     str +=  simNumber  ;    
  54.                 }else{    
  55.                     str +=  simNumber+",";    
  56.                 }    
  57.                     
  58.             }    
  59.         for (int i = 1; i < rsRows; i++) {    
  60.                 
  61.             String sql = "insert into "+dataTable+"("+str+") values(";//拼接sql    
  62.             System.out.println(str);    
  63.             for (int j = 0; j < rsColumns; j++) {    
  64.                 Cell cell = sheet.getCell(j, i);    
  65.                 simNumber = cell.getContents();    
  66.                 if(j==rsColumns-1){    
  67.                     sql += "'"+ simNumber+"'" ;    
  68.                 }else{    
  69.                     sql +="'"+ simNumber+"',";    
  70.                 }    
  71.                     
  72.             }    
  73.             sql += " )";    
  74.             jdbc.executeUpdate(sql);//執行sql    
  75.                 
  76.         }    
  77.         jdbc.closeStmt();    
  78.         jdbc.closeConnection();    
  79.     }    
  80.     
  81. }    

工具類:

[java] view plain copy
  1. package excel;  
  2.   
  3. import java.sql.Connection;    
  4. import java.sql.DriverManager;    
  5. import java.sql.ResultSet;    
  6. import java.sql.SQLException;    
  7. import java.sql.Statement;    
  8.     
  9. /**  
  10.  * Oracle數據庫連接  
  11.  *   
  12.  * @author  
  13.  */    
  14. public class DBUtils {    
  15.     
  16.     private Connection conn = null;    
  17.     private Statement stmt = null;    
  18.     private ResultSet rs = null;    
  19.     
  20.     /** Oracle數據庫連接 URL */    
  21.     private final static String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl";    
  22.     
  23.     /** Oracle數據庫連接驅動 */    
  24.     private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";    
  25.     
  26.     /** 數據庫用戶名 */    
  27.     private final static String DB_USERNAME = "caiyl";    
  28.     
  29.     /** 數據庫密碼 */    
  30.     private final static String DB_PASSWORD = "123456";    
  31.     
  32.     /**  
  33.      * 獲取數據庫連接  
  34.      *   
  35.      * @return  
  36.      */    
  37.     public Connection getConnection() {    
  38.         /** 聲明Connection連接對象 */    
  39.         Connection conn = null;    
  40.         try {    
  41.             /** 使用 Class.forName()方法自動創建這個驅動程序的實例且自動調用DriverManager來註冊它 */    
  42.             Class.forName(DB_DRIVER);    
  43.             /** 通過 DriverManager的getConnection()方法獲取數據庫連接 */    
  44.             conn = DriverManager    
  45.                     .getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);    
  46.             stmt = conn.createStatement();    
  47.         } catch (Exception ex) {    
  48.             ex.printStackTrace();    
  49.         }    
  50.         return conn;    
  51.     }    
  52.     
  53.     /**  
  54.      * 查詢數據部分  
  55.      *   
  56.      * @return ResultSet  
  57.      */    
  58.     public ResultSet executeQuery(String sqlStr) {    
  59.         if (sqlStr == null || sqlStr.length() == 0)    
  60.             return null;    
  61.         try {    
  62.             this.getConnection();    
  63.             rs = stmt.executeQuery(sqlStr);    
  64.             return rs;    
  65.         } catch (SQLException ex) {    
  66.             ex.printStackTrace();    
  67.             return null;    
  68.         }    
  69.     
  70.     }    
  71.     
  72.     /**  
  73.      * 更新數據部分  
  74.      *   
  75.      * @return 更新是否成功  
  76.      */    
  77.     public boolean executeUpdate(String sqlStr) {    
  78.     
  79.         if (sqlStr == null || sqlStr.length() == 0)    
  80.             return false;    
  81.         try {    
  82.             this.getConnection();    
  83.             stmt.executeUpdate(sqlStr);    
  84.             return true;    
  85.         } catch (SQLException ex) {    
  86.             ex.printStackTrace();    
  87.             return false;    
  88.         } finally {    
  89.             try {    
  90.                 if (stmt != null) {    
  91.                     stmt.close();    
  92.                 }    
  93.             } catch (SQLException e) {    
  94.                 e.printStackTrace();    
  95.             }    
  96.             try {    
  97.                 if (conn != null) {    
  98.                     conn.close();    
  99.                 }    
  100.             } catch (SQLException e) {    
  101.                 e.printStackTrace();    
  102.             }    
  103.     
  104.         }    
  105.     
  106.     }    
  107.     
  108.     public void closeStmt() {    
  109.         try {    
  110.             if (stmt != null) {    
  111.                 stmt.close();    
  112.             }    
  113.         } catch (Exception e) {    
  114.             e.printStackTrace();    
  115.         }    
  116.     }    
  117.     
  118.     /**  
  119.      * 關閉數據庫連接  
  120.      *   
  121.      * @param connect  
  122.      */    
  123.     public void closeConnection() {    
  124.         try {    
  125.             if (conn != null) {    
  126.                 /** 判斷當前連接連接對象如果沒有被關閉就調用關閉方法 */    
  127.                 if (!conn.isClosed()) {    
  128.                     conn.close();    
  129.                 }    
  130.             }    
  131.         } catch (Exception ex) {    
  132.             ex.printStackTrace();    
  133.         }    
  134.     }    
  135.     
  136. }    

4.執行效果,查看數據庫表:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章