APACHE POIを使用してExcelファイルからデータを読み取りました。今、コンソールにある結果でデータベースを作成したいと思います。私のExcelファイルには6列と8行があります。誰でも私を助けることができますか?私は数日間解決策を見つけようとしています.. :(
3 に答える
あなたが求めているものには多くの解決策があります。オブジェクト モデルを使用して、それを ORM ツールと結び付けることができます。
ただし、ここから始めます。
Apache Jakarta POI を使用して Excel スプレッドシートから外部テーブルを生成する
この記事は Jakarta POI として参照されているため、日付が付けられていますが、概念は引き継がれている可能性があります。また、これは Oracle ベースのアプローチですが、一般化できます。
このフォーラムでより具体的なものが必要な場合は、ニーズに関してより具体的なものを提供する必要があります.
リスト(目的に応じて文字列またはオブジェクト)に値を保存するなど、この方法でコンテンツを読んでいると仮定します。
//Some code of yours here
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
HSSFRow row = (HSSFRow) rows.next();
Iterator cells = row.cellIterator();
List data = new ArrayList();
while (cells.hasNext()) {
HSSFCell cell = (HSSFCell) cells.next();
data.add(cell);
}
sheetData.add(data);
リストにデータが保存されている場合は、MySQL などのデータベース エンジンを指定します。
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/";
static final String USER = "username";
static final String PASS = "password";
次に、データベースの作成とレコードの挿入に進みます。
Connection conn = null;
Statement stmt = null;
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("About to create a database");
stmt = conn.createStatement();
String dbName = "MyExcelDB";
String sql = "CREATE DATABASE " + dbName;
stmt.executeUpdate(sql);
System.out.println("Database created successfully...");
//Now, create a table based on what you need, maybe you can get the headers of your excel
String tableName = "TBUSER";
String createTableSQL = "CREATE TABLE" + tableName + "("
+ "USER_ID NUMBER(5) NOT NULL, "
+ "USERNAME VARCHAR(20) NOT NULL, "
+ "CREATED_BY VARCHAR(20) NOT NULL, "
+ "CREATED_DATE DATE NOT NULL, " + "PRIMARY KEY (USER_ID) "
+ ")";
Statement createTableStatement = conn.createStatement();
createTableStatement.execute(createTableSQL);
//Now insert
String insertQuery = "insert into " + dbName + "." + tableName + "(user_id,username,created_by,created_date) values (?,?,?,?)";
PreparedStatement insertStatement = conn.prepareStatement(insertQuery);
insertStatement.setInt(1,Integer.parseInt(sheetData.get(0));
insertStatement.setString(2,sheetData.get(1));
//and so on... then
insertStatement.executeUpdate();//This returns an int, if the insert works, the value must be greater than 0
コードには多くの改善点があることは承知していますが、それを行うためのアイデアと「テンプレート」を提供したいと思います。よろしくお願いします。
単純なアプリケーションの場合、必要に応じて、JDBC を使用してオンザフライでデータベースを作成し、レコードを挿入できます。それ以外の場合は、事前にデータベースを作成し、Excel ファイルからデータを読み取るときに行を挿入します。