0

Excelファイルを読み取ってから、Excelの内容をデータベースに書き込もうとしています。エクセルを読むことができ、印刷すると出力の下に表示されます。このデータをデータベースの列に分割または分割して、データベースにデータを保存する方法を知りたいです。DBにテーブルがあり、列に分ければ以下のデータを保持できます。


//CODE OUTPUT
1.0     Henry       Rey     Staff       IT      Software Engg       New Hire        TigoAdmin       11-Oct-2012     11-Oct-2012     555.0
2.0 Nick Murry Staff IT Administrator New Hire TigoAdmin 11-Oct-2012 11-Oct-2012 555.0

// BELOW is the CODE

package com.project.bulk; import java.io.FileInputStream; import java.util.Iterator; import java.util.Vector; 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; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ReadExcelFile { public static void main(String[] args) { String fileName = "C:\\excelFile.xls"; Vector dataHolder = ReadCSV(fileName); printCellDataToConsole(dataHolder); } public static Vector ReadCSV(String fileName) { Vector cellVectorHolder = new Vector(); try { FileInputStream myInput = new FileInputStream(fileName); POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); HSSFSheet mySheet = myWorkBook.getSheetAt(0); Iterator rowIter = mySheet.rowIterator(); while (rowIter.hasNext()) { HSSFRow myRow = (HSSFRow) rowIter.next(); Iterator cellIter = myRow.cellIterator(); Vector cellStoreVector = new Vector(); while (cellIter.hasNext()) { HSSFCell myCell = (HSSFCell) cellIter.next(); cellStoreVector.addElement(myCell); } cellVectorHolder.addElement(cellStoreVector); } } catch (Exception e) { e.printStackTrace(); } return cellVectorHolder; } private static void printCellDataToConsole(Vector dataHolder) { for (int i = 0; i < dataHolder.size(); i++) { Vector cellStoreVector = (Vector) dataHolder.elementAt(i); for (int j = 0; j < cellStoreVector.size(); j++) { HSSFCell myCell = (HSSFCell) cellStoreVector.elementAt(j); String stringCellValue = myCell.toString(); System.out.print(stringCellValue + "\t\t"); } System.out.println(); } } }
4

1 に答える 1

1

ステートメントに送信する引数の数がわからない場合は、それを処理するメソッドを作成できます。非常に基本的な例を示しますが、このアプローチは大幅に改善できることを念頭に置いてください。

public void executeSQLUpdate(String sql, List<Object> arguments) {
    Connection con = null;
    PreparedStatement pstmt = null;
    try {
        con = getConnection(); //a method that returns a java.sql.Connection to your database
        pstmt = con.prepareStatement(sql);
        if (arguments != null) {
            int i = 1;
            for(Object o : arguments) {
                pstmt.setObject(i++, o);
            }
        }
        //method to execute insert, update, delete statements...
        pstmt.executeUpdate();
    } catch(SQLException e) {
        //handle the error...
    } finally {
        //closing the resources (always in finally block, not in the try!)
        try {
            if (pstmt != null) {
                pstmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
        }
    }
}

//calling the method to execute a sql insert statement
public void yourMethodToData(List<Object> arguments) {
    String sql = "INSERT INTO YOUR TABLE VALUES(?)";
    executeSQLUpdate(sql, arguments);
}

Vectorクラスはインターフェースを実装するのでListVectorこれらのメソッドを通過させることができます。

補足として、を使用しないVectorでください。代わりに、でList<Object>実装されたものを使用してArrayList<Object>ください。詳細:Java Vectorクラスが廃止または非推奨と見なされるのはなぜですか?

于 2012-10-14T22:09:37.510 に答える