用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中
java與Excel的連接用到了jxl.jar開源包,與SQLite3的連接用到了sqlitejdbc-v056.jar這個開源包,兩個開源包打包下載:傳送門
如果使用的eclipse做開發,解壓后按下所示導入兩個開源包即可:
對著工程右擊>Build Path>Add External Archives,然后選擇這兩個開源包引入即可。
------------
1,java與Excel的連接:
(jxl.jar開源包的源碼,以及使用API下載:傳送門 )
java與Excel的連接,只需引入jxl的相關包(見最下方源碼),即可實現與Excel文件的連接;
String s = "" ;File file = new File("D:\\hello\\1.xls);
WorkBook wb = Workbook.getWorkbook(file); //創建一個工作簿對象wb,該對象的引用指向某個待讀取的Excel文件 Sheet sheet = wb.getSheet(0); // 創建一個工作簿wb中的工作表對象(0代表第一張工作表,工作簿、工作表的關系,就好比一個記賬本和賬本上某頁記賬表的關系) int stRows = sheet.getRows(); //得到當前工作表中所有非空行的數目;
for(int i=0;i<stRows;i++){Cell cell = sheet.getCell(j, i); //創建一個單元格對象,來存放從sheet的(第j列,第i行)讀取的單元格;s += cell.getContents(); //單元格.getContents()方法,會從當前單元格對象中獲得一個已經轉換為字符串類型的字符串,如需獲得原型(如整形數據),可自查API中相關方法;}
使用完后,使用wb.close()的方法關閉文件流即可。
------------
2,java與SQLite3的連接:
java與SQLite3的連接,以及寫入數據,需要如下的準備工作:
1,通過Class.forName()方法,載入需要連接數據庫的類
Class cl = Class.forName("org.sqlite.JDBC") ; //如果想要了解關于這個方法的意義,可看百度來的這篇文章:http://goo.gl/OpXUG?2,之后與數據庫建立連接,代碼如下:
//通過JDBC:Sqlite與D:\\123目錄下的AllClasses.db文件(SQLite3的數據庫文件)建立連接;Connect conn = DriverManager.getConnection("jdbc:sqlite:d:/123/AllClasses.db");Statement stm =conn.createStatement();//下面這句sql語句的意思是:如果數據庫中沒有"OtherClasses"這張表,則創建之;//加上自加的KC_ID,一列共九個數據;stm.executeUpdate("create table if not exists OtherClasses(" +"KC_ID integer primary key autoincrement," +"KC_NAME vachar(15) ," + "KC_TEACHER vachar(5) ," + "KC_CLASSES vachar(10) ," + "KC_ROOM vachar(6) ," + "KC_ENDTIME vachar(5) ," + "KC_YUANXI vachar(4) ," + "KC_POSITION vachar(3) ," + "KC_MARK vachar(3) );"); /* PreparedStatement 類,通俗來講,就像文件流的BufferedReader一樣,只不過它是用來存放Sql語句的緩沖內容(如有精力,可參考java API),* 1,PreparedStatement prs = conn.prepareStatement("insert into OtherClasses values (?,?,?,?,?,?,?,?,?);"); * 這句話用來預定義你即將插入的一列數據規范,如上那個方法,就是說我準備每次暫存9個待插入的數據(9個問號);* 2,prs 的setString()用來設置Sql語句的內容,一組共九個參數,setString(2,"nihao")就是說,設置本行待插入的第二個數據為“nihao"(從2開始,共9個數據,為什么不是從1開始?因為1是”KC_ID integer primary key autoincrement“,它會根據本行數據添加情況自增,無需賦值);* 3,一組九個數據設定完成后,通過prs.addBatch()方法,將這次的批處理命令添加到prs中去,* 4,通過 conn.setAutoCommit(false); prs.executeBatch(); conn.setAutoCommit(true);這三個方法,便可以將緩存于prs中的一批sql執行命令,真正執行,并將之前一組九個數據,插入到數據庫文件中去.*/PreparedStatement prs = conn.prepareStatement("insert into OtherClasses values (?,?,?,?,?,?,?,?,?);");// 下面這段代碼,便可以插入一列數據;// 為什么從2開始?因為第一個數據是自增型計數器,詳見上面第2條解釋;for( int i = 2; i<9; i++ ) {prs.setString( i, "本次插入" + i ) ;}prs.addBatch();conn.setAutoCommit(false);prs.executeBatch();conn.setAutoCommit(true);上面一段代碼執行后,效果如下圖:
(想要這款圖形界面的SQLite3數據庫瀏覽器的朋友,可以到此下載:傳送門):
------------
3,java如何緩存數據實現excel與sqlite的連接?
我使用了ArrayList來緩存數據。
每一行的數據,存入一個新new出來的ArrayList<String>中;
當讀取完該行的所有數據后,將ArrayList<String>存入一個已經new好的 ArrayList<ArrayList<String>> 當中,直到數據表所有數據被讀取出來。
具體操作,可參考下方提供的源碼中的內容(只需查看ReadDataFromExcel() 和?WriteDataToSQLite() 這兩個方法即可)。
------------
程序源碼說明:
源碼內容經過自己精心整理,注釋也很詳細,是盡量做到每個小模塊都附上一段注釋,所以想要學習的就快快下載吧!
本程序源碼下載:傳送門
還是第一次寫編程技術分享類的博文,如有不到之處,還望見諒指正。
如有問題,可在下方留言,或者跟我在微博上交流。
轉載于:https://www.cnblogs.com/lyfing/archive/2012/06/27/2566074.html
總結
以上是生活随笔為你收集整理的用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端布局神器display:flex
- 下一篇: docker:安装mysql多个