Java模組 -- 讀取Excel檔案寫入資料庫 Mybatis , POI , JXL
廢話不多說,直接上程式碼結構圖
所用到的lib包
Students 實體類
package com.test.model; public class Students { private int id; private String username; private int age; private int salary; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return "Students [id=" + id + ", username=" + username + ", age=" + age + ", salary=" + salary + "]"; } public Students(int id, String username, int age, int salary) { // super(); this.id = id; this.username = username; this.age = age; this.salary = salary; } public Students() { // super(); } }
Mybatis 配置檔案
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置資料庫連線資訊 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/testmysql"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <!-- sql語句的配置檔案 --> <mappers> <mapper resource="com/test/reader/sqlconfig/students.xml"/> </mappers> </configuration>
Students.xml sql語句
SqlSessionUtil<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.readerExcel.TestReaderExcelToDB"> <select id="getStudent" resultType="map"> select * from students order by id </select> <select id="getStudentById" resultType="map" parameterType="map"> select * from students where id = #{userId} </select> <delete id="deleteStuentById" parameterType="map"> delete from students where id = #{userId} </delete> <insert id="insertStudent" parameterType="map"> insert into students (username,age,salary) values ( #{username}, #{age}, #{salary} ) </insert> </mapper>
package com.test.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionUtil {
public SqlSession getSqlSession() {
String configFile = "mybatis_Config.xml";
// 使用類載入器 載入mybatis的配置檔案,mybatis配置檔案中配置了關聯對映檔案
InputStream inputStream = SqlSessionUtil.class.getClassLoader().getResourceAsStream(configFile);
// 構建sqlSession工廠
SqlSessionFactory sqlsessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlsessionFactory.openSession();
return sqlSession;
}
}
讀取Excel的工具類
這個讀取Excel2007 的程式碼有點問題,不知道是方法問題,還是我程式碼問題,總是最後少一行,昨天找了半天沒找到....真是吐血....
ReaderExcelUtils
package com.excelutils;
import java.io.File;
import java.io.FileInputStream;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 讀取Excel
* @author CYX
* @since 2016-6-4 上午1:03:23
*/
public class ReaderExcelUtils {
/**
* 輸入Excel檔案,解析後返回ArrayList
*
* @param file
* 輸入的Excel檔案
*
* @return ArrayList<Map>,其中的map以第一行的內容為鍵值
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static ArrayList<Map> ReaderExcel(File file){
/*
* workbook : 工作簿,就是整個Excel文件
* sheet : 工作表
* cell : 一個單元格
* row : 一行
*/
if(checkExcel2007(file)){
return importToExcel2007(file);
}
//初始化返回值和欄位名陣列
ArrayList<Map> arr = new ArrayList<Map>();
String[] title;
Workbook workbook = null;
try{
//讀取Excel檔案
workbook = Workbook.getWorkbook(file);
//總Sheet數
int sheetNumber = workbook.getNumberOfSheets();
System.out.println("Sheet總數: "+sheetNumber);
for (int i = 0; i < sheetNumber; i++) {
Sheet sheet = workbook.getSheet(i);
//當前頁 總記錄行數和列數
int rowCount = sheet.getRows(); //獲取行數
int columeCount = sheet.getColumns(); //獲取列數
System.out.println("總記錄數 : "+rowCount);
System.out.println("總列數 : "+columeCount);
//第一行為欄位名,所以行數大於一才執行
if(rowCount > 1 && columeCount >0){
//取第一列 為 欄位名
title = new String[columeCount];
for (int j = 0; j < columeCount; j++) {
title[j] = sheet.getCell(j,0).getContents().trim();
}
//取當前頁所有值放入list中
for (int h = 1; h < rowCount; h++) { //行數
LinkedHashMap dataMap = new LinkedHashMap();
for (int k = 0; k < columeCount; k++) { //列數
dataMap.put(title[k], sheet.getCell(k,h).getContents()); //getContents() 獲取單元格的值
}
arr.add(dataMap);
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(workbook != null){
workbook.close();
workbook = null;
}
}
return arr;
}
/**
* 輸入2007版以上excel檔案,解析後返回ArrayList(有個bug,暫時不用,保留)
* @param file
* @return
*/
@SuppressWarnings("rawtypes")
public static ArrayList<Map> importToExcel2007(File file){
ArrayList<Map> arr = new ArrayList<Map>();
String[] title;
//初始化
FileInputStream readFile = null;
XSSFWorkbook workbook = null;
XSSFRow row = null;
XSSFSheet sheet = null;
XSSFCell cell = null;
try{
//讀取檔案
readFile = new FileInputStream(file);
workbook = new XSSFWorkbook(readFile);
//文件頁數
int numOfSheets = workbook.getNumberOfSheets();
System.out.println("文件頁數 : "+numOfSheets);
for (int i = 0; i < numOfSheets; i++) {
//獲取當前的sheet(工作表)
sheet = workbook.getSheetAt(i);
//獲取當前頁的行數
int sheetRows = sheet.getLastRowNum();
System.out.println("當前頁總行數 : "+sheetRows);
//如果當前頁行數大於0,則先取第一行為欄位名
if(sheetRows > 0){
row = sheet.getRow(0); //當前頁 第一行
int cells = row.getLastCellNum(); //第一行 單元格數量
title = new String[cells];
for (int j = 0; j < cells; j++) {
//列為空,則輸入空字串
if(row.getCell(j) == null){
title[j] = "";
continue;
}
cell = row.getCell(j);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:{
Integer num = new Integer((int) cell.getNumericCellValue());
title[j] = String.valueOf(num);
break;
}
case Cell.CELL_TYPE_STRING:{
title[j] = cell.getRichStringCellValue().toString();
break;
}
default:
title[j] = "";
}
}
//分行解析
for (int j = 0; j < sheetRows; j++) {
//如果是空行,則繼續下一條
if(sheet.getRow(j) == null){
continue;
}
//將每行資料放入map中
row = sheet.getRow(j);
arr.add(getCellMap(row,cells,title));
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
readFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return arr;
}
/**
* 根據副檔名判斷是否是Excel 2007 以上
* @param file
* @return
*/
private static boolean checkExcel2007(File file){
String extendName = file.getName().substring(file.getName().lastIndexOf("."));
if(extendName.equals(".xlsx")){
return true;
}
return false;
}
/**
* 根據傳入的Excel行資料,得到Map資料
* @param row
* @param cells
* @param title
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private static Map getCellMap(XSSFRow row , int cells , String[] title){
//初始化
Map data = new HashMap();
XSSFCell cell = null;
//分列
for (int i = 0; i < cells; i++) {
//列為空,則輸入空字串
if(row.getCell(i) == null){
data.put(title[i], "");
continue;
}
cell = row.getCell(i);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:{
if(DateUtil.isCellDateFormatted(cell)){
data.put(title[i], cell.getDateCellValue());
}else{
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
data.put(title[i], nf.format(cell.getNumericCellValue()));
}
break;
}
case Cell.CELL_TYPE_STRING:{
data.put(title[i], cell.getRichStringCellValue());
break;
}
case Cell.CELL_TYPE_BOOLEAN:{
data.put(title[i], cell.getBooleanCellValue());
break;
}
default:
data.put(title[i], "");
}
}
return data;
}
}
Java Bean的一些方法 很好用....多看看專案程式碼...
package com.beanutils;
import java.util.Map;
/**
* JavaBean 工具方法
* @author CYX
* @since 2016-6-4 上午12:16:23
*/
public class MyBeanUtils {
/**
* 將JavaBean中的get屬性轉換到Map中
*
* <pre>
* 符合拷貝條件的屬性必須滿足以下幾點:
* 1.源JavaBean中具有get方法的屬性
* </pre>
*
* @param bean
* 源物件JavaBean
* @return 轉換後的Map
* @throws Exception
*/
public static Map describe(Object bean)throws Exception{
return org.apache.commons.beanutils.BeanUtils.describe(bean);
}
}
測試Main方法
package com.test.readerExcel;
import java.io.File;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.ibatis.session.SqlSession;
import com.beanutils.MyBeanUtils;
import com.excelutils.ReaderExcelUtils;
import com.test.model.Students;
import com.test.util.SqlSessionUtil;
public class TestReaderExcelToDB {
private static ReaderExcelUtils reu = new ReaderExcelUtils();
private static SqlSessionUtil su = new SqlSessionUtil();
private static SqlSession session = su.getSqlSession();
private static String className = TestReaderExcelToDB.class.getName() + ".";
public static void main(String[] args) throws Exception {
InsertToDataBase();
}
/**
* 讀取Excel檔案,將資料存入資料庫
*
* @param data
* 資料
* @throws Exception
*/
@SuppressWarnings({ "rawtypes", "static-access" })
public static void InsertToDataBase() throws Exception {
Date date = new Date();
long time = date.getTime();
String excelFileName = "D://Export Excel By MyBatis.xls";
File file = new File(excelFileName);
List<Map> dataListMap = reu.ReaderExcel(file);
Iterator it = dataListMap.iterator();
Students students = new Students();
MyBeanUtils mu = new MyBeanUtils();
try {
while (it.hasNext()) {
Map oneMap = (Map) it.next();
students.setUsername(oneMap.get("姓名").toString());
students.setAge(Integer.parseInt(oneMap.get("年齡").toString()));
students.setSalary(Integer.parseInt(oneMap.get("工資").toString()));
Map beanMap = mu.describe(students);
int result = 0;
try {
result = session.insert(className + "insertStudent",beanMap);
if(result < 1){
System.out.println("插入資料庫錯誤");
}
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
System.out.println("全部插入資料庫");
Date date2 = new Date();
long time2 = date2.getTime();
long longs = time2 - time;
System.out.println(longs);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取Map中的key值
*
* @param dataMap
* @return
*/
public static String[] getMapKey(Map dataMap) {
String[] keyArr = new String[dataMap.size()];
if (dataMap.size() < 0 || dataMap == null) {
System.out.println("Map為空");
return null;
}
String keyStr = "";
Set set = dataMap.keySet();
for (Object name : set) {
keyStr += name + ",";
}
keyStr = keyStr.substring(0, keyStr.length() - 1);
keyArr = keyStr.split(",");
return keyArr;
}
}
Excel檔案內容
執行之後,資料庫就有了....
之前在公司電腦上測試,一千五百條資料的Excel 花了75秒左右...
晚上回家用自己電腦,才2,3秒....公司電腦真是渣....
手賤試了試五千條..才五秒....
哎,真是.....
相關推薦
Java模組 -- 讀取Excel檔案寫入資料庫 Mybatis , POI , JXL
廢話不多說,直接上程式碼結構圖 所用到的lib包 Students 實體類 package com.test.model; public class Students { private int id; private String username; pr
將Excel檔案匯入資料庫(POI+Excel+MySQL+jsp頁面匯入)第一次優化
本篇文章是根據我的上篇部落格,給出的改進版,由於時間有限,僅做了一個簡單的優化。2018年4月1日,新增下載地址連結:點選開啟原始碼下載地址十分抱歉,這個連結地址沒有在這篇文章上公佈出來。希望不是很晚。上篇文章的是這樣的一個數據流向:瀏覽器端開啟上傳頁面,選擇檔案,上傳,將e
java讀取excel檔案內容,並將讀取到的內容寫入到另一檔案中
需要匯入的jar包下載地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 程式碼:ReadExcel.java //信1605-3 20163432 張運濤 package domain; import java.io.File; im
java實現讀取excel或者txt檔案,匯入MongoDB資料庫
在工作中經常遇到讀取的檔案的問題,於是做了一個小總結。 1.Excel表格內容如下 2.建立main主類 public static void main(String[] args) throws Exception { &nb
java利用poi讀取Excel檔案
java讀取Excel檔案,筆者認為:從結構上來看,Excel檔案是由一個一個的單元格組成的,有點像細胞cell,逐行的排列。那麼我們讀的時候也應該逐行逐行的讀,從左到右的尋找每一個cell。一、例項程式碼: 只是實現了一種方式,因為依照讀取內容的不同,讀取的後想要的操作不同,因此不能苟同全部,只是方法是相
Java 讀取Excel 檔案內容
在一個專案中,有一個需求,是把excel檔案的內容轉換為xml格式展示。在學習如何操作的過程中,首先是如何獲取excel檔案,其中操作的程式碼如下: 1.首先是匯入需要的 jar, 下載地址: 2.程式碼實現: package com.apusic; import org.apache.po
java讀取excel檔案內容
import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List;
Java讀取properties檔案連線資料庫
先說為什麼要有這種東西,或者我們為什麼要用這種方式來寫,先看經常用的方法,我們經常寫的 package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQ
python 讀取excel檔案並寫入json
excel內容:程式碼: import xlrd import json import operator def read_xlsx(filename): # 開啟excel檔案 data1 = xlrd.open_workbook(file
java無格式int檔案寫入和讀取
今天寫一個小程式,需要將int陣列寫入檔案,然後再讀出來。為了節省空間,打算採用直接把每個int的位元組碼寫入檔案,讀的時候也是按照int的位元組碼直接進行讀取,省略了逗號、換行符等格式編碼。 第一次嘗試: FileOutputStream fOut = new File
python3 迴圈讀取excel檔案並寫入json
檔案內容: excel內容: 程式碼: import xlrd import json import operator def read_xlsx(filename): # 開啟excel檔案 data1 = xlrd.open_workbo
JAVA POI上傳excel檔案到資料庫並備份(上)
一、電商系統和辦公系統時常會用到Excel的匯入與匯出,在JAVA程式碼實現時,通常使用POI來處理,今天用一個demo為大家介紹POI上傳excel檔案並將資料匯入資料庫的實現過程。demo是一個jsp/servlet+maven的web專案。 二、環境: 資料庫
python讀取excel檔案並匯入mysql資料庫
import MySQLdb import xlrd import xlwt from datetime import date,datetime database = MySQLdb.connect (host="114.116.2.203", user = "r
java讀取excel 檔案,並把讀取到的資料轉換成javabean物件
javaBean物件public class AcademicaChievements { private Integer aid; private String number; private String sname; private String award_
java使用POI讀取excel檔案,相容xls和xlsx
public List<Double> readExcels(InputStream is)throws Exception{List<Double> xlsxList = new ArrayList<Double>(); try { if(i
java讀取excel檔案
package com.execl; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.A
解決java讀取excel檔案有小數點的問題
package com.hmy.ssh.myMethod; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import
Java讀取Excel檔案,生成SQL語句
import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import java.io.*; public class Main { public static void
利用pandas模組讀取csv檔案和excel表格,並用matplotlib畫圖
# coding=utf-8 import pandas as pd # 讀取csv檔案 3列取名為 name,sex,births,後面引數格式為names= names1880 = pd.read
java 操作 poi 解析、讀取 Excel 檔案
讀取Excel 我這裡是用的POI 的jar包 dom4j-1.6.1.jar poi-3.10.1-20140818.jar poi-excelant-3.10.1-20140818.jar xmlbeans-2.6.0.jar po