最近在做一個小項目遇到一個問題,對於一個科研學科,分爲一級學科和二級學科,且這些數據都是放在一個excel文件中。數據量接近900行,如果手工錄入肯定會瘋掉,說不定還會錄錯,既然咱是程序猿肯定不用自己去幹這麼傻的事。網上溜達了一下找到一個解決方案。
1、首先到網上去找一個jxl.jar的jar包,加入到項目中。(注意一點:此jar包不支持excel2007+版本)
2、將要讀取的資源放到硬盤上容易找到的地方,爲了方便我就放在D盤下了。
3、加入數據庫連接jar包,寫一個數據庫管理類
DBManager:
4、ok,現在就來進入主要部分編寫轉換代碼
package com.akwolf.transform; import java.io.File; import java.sql.Connection; import java.sql.Statement; import jxl.Sheet; import jxl.Workbook; /** * 讀取Excel到數據庫 * * @author zhanghua * */ public class TransformExcel { public static void main(String[] args) throws Exception { File file = new File("D:" + File.separator + "subject.xls"); //取得一個可以操作的excel Workbook workbook = Workbook.getWorkbook(file); Sheet[] sheet = workbook.getSheets(); Connection conn = DBManager.getInstance().getConnection();// 取得連接 TransformExcel excel = new TransformExcel(); String sn = "", intro = "", sql = "", firstSn = ""; boolean insert = true; //是否向數據庫中插入數據,若一行數據爲空據不進行插入 for (int x = 0; x < sheet.length; x++) { for (int y = 0; y < sheet[x].getRows(); y++) { boolean first = false; for (int z = 0; z < sheet[x].getColumns(); z++) { String content = sheet[x].getCell(z, y).getContents(); // 本行爲空 if (z == 0 && content.equals("")) { insert = false; break; } // 如果是一級學科 if (content.length() == 3 && z == 0) { firstSn = content; first = true; } //設置每列的數據庫 if (z == 0) { sn = content; } else if (z == 1) { intro = content; } } //拼裝sql語句 if (first) { sql = "insert into firstsubject(first_subject_id,first_subject_name) values('" + sn + "','" + intro + "')"; first = false; } else { sql = "insert into secondsubject(second_subject_id,second_subject_name,first_subject_id) values('" + sn + "','" + intro + "','" + firstSn + "')"; } //是否可以插入到數據庫 if (insert) { excel.insertIntoDB(conn, sql); }else{ insert = true; } } } DBManager.getInstance().realse(); } public void insertIntoDB(Connection conn, String sql) throws Exception { Statement stmt = conn.createStatement(); stmt.executeUpdate(sql); stmt.close(); } }看一下運行結果:
好了這個小demo完成了,希望可以幫到大家!!
所有用到的素材都打包好了,有需要的同學可以自己去下載。