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コードです.
DBUtiクラス、次は私のコード実装です
InputExcelクラス、以下は私のコード実装です
次に、これらのクラスを使用してexcelをデータベースにインポートするインスタンスコードを示します.
これでExcelにインポートされたバックグラウンドコード全体が完了します.フロントエンドではinputExcel()メソッドを呼び出すだけで、インポートするexcelファイルのパスを入力することで、今回のインポートを完了できます.
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ファイルのパスを入力することで、今回のインポートを完了できます.