Excelファイルをデータベースにインポートする

8857 ワード

今日、会社は2つのExcelファイルを特定のルールで1つのファイルに統合することを実現させました.この機能を実現する第一歩は、Excelをデータベースにインポートすることです.次に、Excelをデータベースにインポートするための具体的な手順をまとめます.(javaプログラム)
1:必要なクラスを明確にするここでは3つのクラスを使用します:I:DBUtilクラス.このクラスはツールクラスで、主にデータベースに接続したり、検索したりしてデータベースを操作する行為を担当しています.Ⅱ:InputExcelクラス.このクラスの主な役割は、Excelテーブルのアップロード、解析など、Excelテーブルを「プリオペレーション」する行為III:Modelクラスです.このクラスは1つのモデルで、中はget()、set()メソッドなどだらけです.主に「橋」の役割を果たす.
これにより、InputExceクラスのメソッドで取得したデータをModelを介してデータベースに転送したり、データベースのデータをModelに転送したりして、これらのデータを取得することができます.
2:必要なjarパッケージと関連知識を明確にしてExcelを操作する方法は2つありますが、この2つの方法で対応するjarパッケージはそれぞれ異なります.ここでは「jxl」を使用してExcelを操作します.そのため、「jxl.jar」というパッケージが必要です.見つからない場合はmavenのサイトに直接ダウンロードすればいいです.
jxlの基本オブジェクトが表す対応する意味を簡単に説明します.
WorkbookというオブジェクトはExcelファイル全体を表しています.例:Workbook a=Workbook.getWorkbook(new File(「対応するファイルパス」)です.このときオブジェクトaはこのExcelファイルと近似することができる.Sheetというオブジェクトは、現在のファイルの下にあるいくつかのワークブックを表します.例えば、Sheet rs=a.getSheet(0);このときrsは最初のワークブックを表します.Cellは、現在のワークブックの下にあるテーブルを表します.例えばCell cel=rs.getCell(0,2);このときcelは1列3行目のテーブルを表します.(注:Excelテーブルの最初の列は前の数字で、最初の行は一番上のアルファベットです.)その後celを通過することができる.getContents().メソッドを使用して、テーブルのデータを取得します.
3:書き込みコード
Modelのコードは言うまでもなく、次は私のModelコードです.
public class K3Model {
	String id;
	String name;	
	String typeString;
	String number;
	String status;	
    public K3Model(String id,String name,String typeString,String number,String status) {
		// TODO Auto-generated constructor stub
    	
    	this.id=id;
    	this.name=name;
    	this.typeString=typeString;
    	this.number=number;
    	this.status=status;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTypeString() {
		return typeString;
	}
	public void setTypeString(String typeString) {
		this.typeString = typeString;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	@Override
	public String toString() {
		return "K3Model [id=" + id + ", name=" + name + ", typeString=" + typeString + ", number=" + number
				+ ", status=" + status + "]";
	}
}


DBUtiクラス、次は私のコード実装です
package cn.wintec.util;

import java.sql.*;
public class DBhelper {
	
	Connection conn=null;
	ResultSet rSet=null;
	
	public void connect(){
		try {
			//           (   mysql   mysql ,  sqlsever    sqlsever 。          jar )
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			//           ip           。			conn=DriverManager.getConnection("jdbc:sqlserver://192.122.11.221:1433;DatabaseName=k3excel;IntegratedSecurity=false","username","password");			
		} catch (ClassNotFoundException e) {
			// TODO: handle exceptio
			System.out.println("        ");
			e.printStackTrace();						
		}catch (SQLException e) {
			// TODO: handle exception
			System.out.println("     !!");			
			e.printStackTrace();
			}		
	}
	public ResultSet  Search(String sql,String str[]) {
	/*         ,    Search           。                        ,                 。       */
		//connect();
		try {
		//       ‘?’	        PreparedStatement  。
			PreparedStatement pst=conn.prepareStatement(sql);			
			for (int i = 0; i <= str.length-1; i++) {
			//         ‘?’     。            ‘?’    ,            。
				pst.setString(i+1,str[i]);
			}
			//executeQuery();  insert、update、delete      ,      select   。
			rSet=pst.executeQuery();
		} catch (Exception e) {
			// TODO: handle exception
			//e.printStackTrace();
			System.out.println("    ");
		}		
		return rSet;	
	}
	
	public int Addu(String sql ,String str[]){
		int a=-1;
		//      ,                   
		//connect();	
		try {
		//   
		PreparedStatement pStatement=conn.prepareStatement(sql);
		if (str!=null) {
				for (int i = 0; i <= str.length-1; i++) {
					//   
					pStatement.setString(i+1,str[i]);		
				}
			}
			//executeUpdate();    select SQL  。
			a=pStatement.executeUpdate();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("SQL      "+a);
			e.printStackTrace();		
		}		
		return a;
	}		
}


InputExcelクラス、以下は私のコード実装です
package cn.com.wintec.controller;

import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import cn.com.wintec.entity.K3Model;
import cn.wintec.util.DBhelper;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


//          
public class InputExcel {

	//               
	public static List getAllByDb() {
		//       Model     。
		List list=new ArrayList();	
		//            
		DBhelper db=new DBhelper();
		String sql="select * from TMPITEM";
		//     
		db.connect();
		//     sql  , select       ResultSet    。
		ResultSet rSet=db.Search(sql, null);
		try {
			//  ResultSet  
			while (rSet.next()){
			//                。(   get          )
				String id=rSet.getInt("id");
				String name=rSet.getString("name");
				String typeString=rSet.getString("typeString");
				String number=rSet.getString("number");
				String status=rSet.getString("status");
				//         Model   list 。
				list.add(new K3Model(id, name, typeString, number, status));				
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		//          
		return	list;
	}
	

	//        Excel     (          )
	public static List getAllByExcel(String file){
	//list  
		List list =new ArrayList();
		try {
		    //  excel   
			Workbook rwb=Workbook.getWorkbook(new File(file));
		   //       	
			Sheet rs=rwb.getSheet(0);
     		//        
			int clos=rs.getColumns();
			//        
			int rows=rs.getRows();
	
			for (int i = 1; i < rows; i++) {
				int j=0;
				//        (        )   。
				String id=rs.getCell(j++,i).getContents();
				//        (        )   。
				String name=rs.getCell(j++,i).getContents();
				String typeString=rs.getCell(j++,i).getContents();
				String number=rs.getCell(j++,i).getContents();
				String status=rs.getCell(j++,i).getContents();				
			//	System.out.println("id:"+id+"  name:"+name+" typeString:"+typeString+" num:"+number+" status:"+status);
			//        Model list 
				list.add(new K3Model(id, name, typeString, number, status));
			}			
		} catch (IOException e) {
			System.out.println("        ");
			// TODO: handle exception
		} catch (BiffException e) {
			// TODO Auto-generated catch block
			System.out.println("JXL      ");
		}	
		return list;
	}

//            ,   id          
	public static boolean isExist(String id,DBhelper dBhelper){
		try {
			//     Serch           
			ResultSet rSet=  dBhelper.Search("select * from TMPITEM where FNumber=?", new String[]{id});	
			//             true
			if (rSet.next()) {
				return true;
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		//          false
		return false;			
	}	
}


次に、これらのクラスを使用してexcelをデータベースにインポートするインスタンスコードを示します.
//  k3  ,            
	@ResponseBody
	@RequestMapping(value="K3fileUpload", produces = "application/json;charset=UTF-8")
	public static void  inputExcel(HttpServletRequest request) {
		//            
		String file = request.getParameter("cs");
		System.out.println("file===="+file);
		//        Excel      
		List listExcel=InputExcel.getAllByExcel(file);
		//            
		DBhelper dBhelper=new DBhelper();
		//     
		dBhelper.connect();
		//  K3Model     (    model         Excel)
		for (K3Model k3Model:listExcel) {
			//       
			String  id=k3Model.getId();
			//              
			if (!InputExcel.isExist(id,dBhelper)) {
				String sql="insert into TMPITEM(FNumber,FName,FModel) values(?,?,?)";
				String[] str=new String[]{k3Model.getId(),k3Model.getName(),k3Model.getTypeString()};
				//System.out.println("-----------in-------------------"+str.toString());
				//    sql             
				dBhelper.Addu(sql, str);
			}else{
			//   
				String sql="update TMPITEM set FName=?,FModel=? where FNumber=?";
				String[] str=new String[]{k3Model.getName(),k3Model.getTypeString(),id};
				//System.out.println("------------up------------------"+str.toString());
				dBhelper.Addu(sql, str);
			}
		}
		System.out.println("      ");		
	}	

これでExcelにインポートされたバックグラウンドコード全体が完了します.フロントエンドではinputExcel()メソッドを呼び出すだけで、インポートするexcelファイルのパスを入力することで、今回のインポートを完了できます.