java實現excel導入資料庫
你知道poi和jdbc嗎?用這兩個就可以了。再建立一個Bean用作數據傳輸。
List<ListpageBean>beanList=newArrayList<ListpageBean>();
Filefile=newFile("d:/test/test.xls");
InputStreamis=newFileInputStream(file);
HSSFWorkbookworkbook=newHSSFWorkbook(is);
HSSFSheetsheet=workbook.getSheetAt(0);
for(introwNum=0;rowNum<=sheet.getLastRowNum();rowNum++){
ListpageBeanbean=newListpageBean();
HSSFRowrow=sheet.getRow(rowNum);
siteId=(int)row.getCell(1).getNumericCellValue();
name=row.getCell(3).getStringCellValue();
url=row.getCell(4).getStringCellValue();
charset=row.getCell(5).getStringCellValue();
bean.setSiteId(siteId);
bean.setName(name);
bean.setUrl(url);
bean.setCharset(charset);
beanList.add(bean);
}
listpageService.addListpageBatch(beanList,ConfigUtil.getDataSourceArray()[0]);
這是我之前寫的一部分代碼,當然不全面,因為有些部分是別人寫的我只是調用了一些方法,僅供參考。
B. java實現excel表導入,有的欄位資料庫中沒有,需要關聯表,怎麼導入
excel 的導出,通常的做法是把查詢的數據准備好才開始導出的
如果是sql問題的話,那麼就是3表關聯就好了
例如 :
網站中 存放 模塊 和 功能的 2張表,多對多
create table mod (
id number ,
name varchar2(20) -- 模塊名
);
create table func (
id number ,
name varchar2(20) --功能名
) ;
中間表
create table modfunc(
modID number references mod(id),
funcId number references func(id),
primary key (modid , funcid)
) ;
要求 導出 模塊 =系統管理的所有功能,
導出的 excel格式如下
模塊名 功能名
SQL語句
select m.name modname , f.name funcname from mod m
inner join modfunc mc on m.id = mc.modid
inner join func f on f.id = mc.funcid
where m.name = '系統管理'
這樣查詢出來的是個 list
然後再導出excel吧
希望對你有幫助
C. java將excel文件中的數據導入到mySql資料庫中 完整代碼
//根據excel文件,生成輸入流
FileInputStream fis = new FileInputStream(new File("D:\\aa.xlsx"));
//用輸入流生成poi 對象,以讀取excel內容
//excel2007以上用XSSFWorkbook,2003用HSSFWorkbook
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);//取第一個sheet
String str1 = sheet.getRow(0).getCell(0).getStringCellValue();//取第一行第一列字元值
//getDateCellValue();日期類型 getNumericCellValue()數字類型;getHyperlink()超鏈接 等等()
//接下來 選擇性插入資料庫吧,明白?
D. 如何用Java實現把excel表中的數據導入到mysql資料庫已有的表中
可以利用jxl.jar這個包(封裝了對execl的操作)
我寫過一個,不知道你能看懂多少:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ExcelDemo {
public static void main(String[] args) throws BiffException, IOException {
executeQues("D:/corejava.xls");
}
public static void executeQues(String filename){
String sql ="insert into questionstest values(myseq_qusetion.nextval,?,?,?,?,?,?,?,?)";
Connection conn=MyDBCon.getConnection();
PreparedStatement state =null;
Sheet [] rsArray=getExcel(filename);
Sheet rs =rsArray[0];
try {
conn.setAutoCommit(false);
state = conn.prepareStatement(sql);
for(int i=0;i<rs.getRows();i++){
state.setString(1, (rs.getCell(0, i).getContents()));
state.setInt(2, Integer.parseInt(rs.getCell(1, i).getContents()));
state.setInt(3, Integer.parseInt(rs.getCell(2, i).getContents()));
state.setString(4, (rs.getCell(3, i).getContents()));
state.setString(5, (rs.getCell(4, i).getContents()));
state.setString(6, (rs.getCell(5, i).getContents()));
state.setString(7, (rs.getCell(6, i).getContents()));
state.setString(8, (rs.getCell(7, i).getContents()));
state.addBatch();
if(i%10==0){
int []ary=state.executeBatch();
state.clearBatch();
System.out.println(Arrays.toString(ary));
}
}
state.executeBatch();
conn.setAutoCommit(true);
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
MyDBCon.close(state);
MyDBCon.close(conn);
}
}
private static Sheet[] getExcel(String filename){
jxl.Workbook rwb = null;
Sheet [] rsArray = null ;
Sheet rs = null ;
try {
InputStream is = new FileInputStream(filename);
rwb = Workbook.getWorkbook(is);
rsArray =rwb.getSheets();
rs =rsArray[0];
for(int i=0;i<rs.getRows();i++){
for(int j=0;j<rs.getColumns();j++){
System.out.print(rs.getCell(j, i).getContents()+"\t");
}
System.out.println();
}
} catch (BiffException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
rwb.close();
}
return rsArray;
}
}
E. 用java怎麼將excel表格數據導入到mysql資料庫中
參考下面方法:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class TestExcel {
//記錄類的輸出信息
static Log log = LogFactory.getLog(TestExcel.class);
//獲取Excel文檔的路徑
public static String filePath = "D://excel.xls";
public static void main(String[] args) {
try {
// 創建對Excel工作簿文件的引用
HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath));
// 在Excel文檔中,第一張工作表的預設索引是0
// 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);
HSSFSheet sheet = wookbook.getSheet("Sheet1");
//獲取到Excel文件中的所有行數
int rows = sheet.getPhysicalNumberOfRows();
//遍歷行
for (int i = 0; i < rows; i++) {
// 讀取左上端單元格
HSSFRow row = sheet.getRow(i);
// 行不為空
if (row != null) {
//獲取到Excel文件中的所有的列
int cells = row.getPhysicalNumberOfCells();
String value = "";
//遍歷列
for (int j = 0; j < cells; j++) {
//獲取到列的值
HSSFCell cell = row.getCell(j);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value += cell.getNumericCellValue() + ",";
break;
case HSSFCell.CELL_TYPE_STRING:
value += cell.getStringCellValue() + ",";
break;
default:
value += "0";
break;
}
}
}
// 將數據插入到mysql資料庫中
String[] val = value.split(",");
TestEntity entity = new TestEntity();
entity.setNum1(val[0]);
entity.setNum2(val[1]);
entity.setNum3(val[2]);
entity.setNum4(val[3]);
entity.setNum5(val[4]);
entity.setNum6(val[5]);
TestMethod method = new TestMethod();
method.Add(entity);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
F. 怎樣將Excel文件導入資料庫(在JSP環境下Java代碼)
我只給你說下第二步怎麼樣吧,其他的你自己應該可以解決的。
通過使用第三方包jxl.jar,我以前導過數據,也是解析Excel,將Excel中的數據導入資料庫中,這個包很好下,如果找不到可以留下郵箱
//程序說明: 要導入jxl.jar到Classpath中。
import jxl.*;
import java.io.*;
import jxl.write.*;
/**
* <p>java讀取Excel表格,拷貼心、更新Excel工作薄 </p>
*/
public class Test1 {
public static void main(String[] args) {
jxl.Workbook rwb = null;
try{
//構建Workbook對象 只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建Workbook
InputStream is = new FileInputStream("D://Book1.xls");
rwb = Workbook.getWorkbook(is);
//Sheet(術語:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
//Sheet的下標是從0開始的
//獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
//獲取Sheet表中所包含的總列數
int rsColumns = rs.getColumns();
//獲取Sheet表中所包含的總行數
int rsRows = rs.getRows();
//獲取指這下單元格的對象引用
for(int i=0;i<rsRows;i++){
for(int j=0;j<rsColumns;j++){
Cell cell = rs.getCell(j,i);
System.out.print(cell.getContents()+" ");
}
System.out.println();
}
//利用已經創建的Excel工作薄創建新的可寫入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("D://Book2.xls"),rwb);
//讀取第一張工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);
//獲取第一個單元格對象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
//決斷單元格的類型,做出相應的轉化
if (wc.getType() == CellType.LABEL) {
Label l = (Label) wc;
l.setString("The value has been modified.");
}
//寫入Excel對象
wwb.write();
wwb.close();
}catch(Exception e){
e.printStackTrace();
}
finally{
//操作完成時,關閉對象,翻譯佔用的內存空間
rwb.close();
}
}
}
G. 如何用java實現把excel表中的數據導入到mysql資料庫已有的表中
packagecom.cn.util;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.log4j.Logger;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.ss.usermodel.Workbook;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;
importorg.springframework.web.multipart.MultipartFile;
/**
*excel讀寫工具類
*@authorsun.kai
*/
publicclassPOIUtil{
privatestaticLoggerlogger=Logger.getLogger(POIUtil.class);
privatefinalstaticStringxls="xls";
privatefinalstaticStringxlsx="xlsx";
/**
*讀入excel文件,解析後返回
*@paramfile
*@throwsIOException
*/
publicstaticList<String[]>readExcel(MultipartFilefile)throwsIOException{
//檢查文件
checkFile(file);
//獲得Workbook工作薄對象
Workbookworkbook=getWorkBook(file);
//創建返回對象,把每行中的值作為一個數組,所有行作為一個集合返回
List<String[]>list=newArrayList<String[]>();
if(workbook!=null){
for(intsheetNum=0;sheetNum<workbook.getNumberOfSheets();sheetNum++){
//獲得當前sheet工作表
Sheetsheet=workbook.getSheetAt(sheetNum);
if(sheet==null){
continue;
}
//獲得當前sheet的開始行
intfirstRowNum=sheet.getFirstRowNum();
//獲得當前sheet的結束行
intlastRowNum=sheet.getLastRowNum();
//循環除了第一行的所有行
for(introwNum=firstRowNum+1;rowNum<=lastRowNum;rowNum++){
//獲得當前行
Rowrow=sheet.getRow(rowNum);
if(row==null){
continue;
}
//獲得當前行的開始列
intfirstCellNum=row.getFirstCellNum();
//獲得當前行的列數
intlastCellNum=row.getPhysicalNumberOfCells();
String[]cells=newString[row.getPhysicalNumberOfCells()];
//循環當前行
for(intcellNum=firstCellNum;cellNum<lastCellNum;cellNum++){
Cellcell=row.getCell(cellNum);
cells[cellNum]=getCellValue(cell);
}
list.add(cells);
}
}
workbook.close();
}
returnlist;
}
publicstaticvoidcheckFile(MultipartFilefile)throwsIOException{
//判斷文件是否存在
if(null==file){
logger.error("文件不存在!");
thrownewFileNotFoundException("文件不存在!");
}
//獲得文件名
StringfileName=file.getOriginalFilename();
//判斷文件是否是excel文件
if(!fileName.endsWith(xls)&&!fileName.endsWith(xlsx)){
logger.error(fileName+"不是excel文件");
thrownewIOException(fileName+"不是excel文件");
}
}
(MultipartFilefile){
//獲得文件名
StringfileName=file.getOriginalFilename();
//創建Workbook工作薄對象,表示整個excel
Workbookworkbook=null;
try{
//獲取excel文件的io流
InputStreamis=file.getInputStream();
//根據文件後綴名不同(xls和xlsx)獲得不同的Workbook實現類對象
if(fileName.endsWith(xls)){
//2003
workbook=newHSSFWorkbook(is);
}elseif(fileName.endsWith(xlsx)){
//2007
workbook=newXSSFWorkbook(is);
}
}catch(IOExceptione){
logger.info(e.getMessage());
}
returnworkbook;
}
(Cellcell){
StringcellValue="";
if(cell==null){
returncellValue;
}
//把數字當成String來讀,避免出現1讀成1.0的情況
if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC){
cell.setCellType(Cell.CELL_TYPE_STRING);
}
//判斷數據的類型
switch(cell.getCellType()){
caseCell.CELL_TYPE_NUMERIC://數字
cellValue=String.valueOf(cell.getNumericCellValue());
break;
caseCell.CELL_TYPE_STRING://字元串
cellValue=String.valueOf(cell.getStringCellValue());
break;
caseCell.CELL_TYPE_BOOLEAN://Boolean
cellValue=String.valueOf(cell.getBooleanCellValue());
break;
caseCell.CELL_TYPE_FORMULA://公式
cellValue=String.valueOf(cell.getCellFormula());
break;
caseCell.CELL_TYPE_BLANK://空值
cellValue="";
break;
caseCell.CELL_TYPE_ERROR://故障
cellValue="非法字元";
break;
default:
cellValue="未知類型";
break;
}
returncellValue;
}
}
H. java,用POI實現將excel導入到資料庫
用到的類 是 :
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
try {
// List<String[]> 中的元素 行數組String[]為excel中的每一行
List<String[]> list = new ArrayList<String[]>();
InputStream is = new FileInputStream("test.xls");
HSSFWorkbook hwk = new HSSFWorkbook(is);// 將is流實例到 一個excel流里
HSSFSheet sh = hwk.getSheetAt(0);// 得到book第一個工作薄sheet
int rows = sh.getLastRowNum()+1 - sh.getFirstRowNum(); // 總行數
for(int i=0; i<rows; i++){
HSSFRow row = sh.getRow(i);
int cols = row.getLastCellNum()+1 - row.getFirstCellNum(); // 該行的總列數
String[] str = new String[cols]; // 用來存放該行每一列的值
for (int j = 0; j < cols; j++) {
Object col = row.getCell((short)j);
str[j] = col.toString();
}
}
......
......
循環變數 i 和 j 可以自己設定從第幾行開始讀,第幾列開始讀,下標從0開始。
然後你想做什麼判斷想做什麼數據匹配都可以自己加了。
poi.hssf.usermodel.* jar包要是網上找不到,就給我發郵件,我郵給你:[email protected]
I. 使用java將excel里的數據怎麼導入到資料庫里了
使用JXL庫讀取EXECL,然後再INSERT到資料庫了
使用POI庫也可以
J. java中怎麼把excel導入資料庫
1、利用Excel第三方工具,將Excel文件讀取到內存中。使用最簡單,方便的工具是apache的poi工具包,自己網上下載http://poi.apache.org/,使用方法網上一搜一大片。
2、如果是對於特別大的excel(大於20M的話),簡單的讀取方法就容易內存溢出了,需要採用流式讀取的方式,參考http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api
3、將已讀入內存的Excel數據,整理成寫資料庫的數據結構,然後插入資料庫。這部分工作應該不用介紹了,就是基本的資料庫操作方法,與excel無關了