0

私はウェブを精査しましたが、これについては何も見つかりませんでした。JTable にレコードのグループがあり、これらのレコードを MS Access データベースの既存のテーブルにエクスポートする必要があります。すでにデータが存在する可能性があるため、このテーブルにレコードを追加できる必要があります。

私は過去 2 日間、Jackcess と UcanAccess ライブラリについて読んで学びました。この時点で私は完全にタップアウトされているので、誰かが親切にコードを投稿してくれたら、本当に感謝しています。

編集: 午後 5 時 15 分 PT 確かにモノリシック タスク。有益なアドバイスをありがとうございました。私は今、なんとか解決策にたどり着きました。jTable の内容は実際には表示目的でのみ存在し、データセットを他のデータベースにエクスポートするために使用する理想的なソースではないことを理解するのに役立つ投稿を読みました。そこで、Jackcess ライブラリの ImportUtil を使用して、ResultSet を Access データベースに直接エクスポートしました。答えはずっと目の前にありました: http://jackcess.sourceforge.net/ (上から4番目のコードサンプルです)

これが、このために作成した AccessExporter.java クラスです。これは、ResultSet オブジェクト、「TableName」、およびデータベース ファイルの場所を定義する File オブジェクトの 3 つのパラメータを取ります。コードは次のとおりです。

import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.util.ImportUtil;
import java.io.File;
import java.sql.ResultSet;

/**
 *
 * @author petehahn
 */
public class AccessExporter {
    void fillData(ResultSet jTableResults, String dbTableName, File dbFile){
    try {
        Database dbTarget = DatabaseBuilder.open(dbFile);
        new ImportUtil.Builder(dbTarget, dbTableName).importResultSet(jTableResults);

    dbTarget.close();

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }   
        }
}
4

1 に答える 1

1

このような JTable を作成して表示する Java™ チュートリアルのSimpleTableDemo

BasicTable.png

printDebugDataテーブル データをコンソールに書き込むという名前のメソッドが含まれています。そのコードを調整して、代わりにテーブル データを Access データベースに書き込むことができます。

UCanAccessをダウンロードし、必要な参照をプロジェクトに追加したと仮定します。

ODBC を使用せずに Java から Access データベースを操作する

また、Access データベースにフィールドを含む [SimpleTableDemo] という名前のテーブルが既にあると仮定します。

ID - AutoNumber、主キー
FirstName - Text(255)
LastName - Text(255)
Sport - Text(255)
NumYears - Number(Long Integer)
Vegetarian - はい/いいえ

の最初の行public class SimpleTableDemoは、変数を設定しDEBUGます。次のように設定する必要がありますtrue

private boolean DEBUG = true;

次に、printDebugDataメソッドを変更してデータベースを更新できます

private void printDebugData(JTable table) {
    // modified to write table data to database instead of printing to console
    int numRows = table.getRowCount();
    javax.swing.table.TableModel model = table.getModel();

    try (Connection conn = DriverManager.getConnection(
            "jdbc:ucanaccess://C:/Users/Public/Database1.accdb")) {
        try (PreparedStatement ps = conn.prepareStatement(
                "INSERT INTO SimpleTableDemo (" +
                "FirstName, LastName, Sport, NumYears, Vegetarian " +
                ") VALUES (?,?,?,?,?)")) {
            for (int i=0; i < numRows; i++) {
                ps.setString(1, (String)model.getValueAt(i, 0));  // FirstName
                ps.setString(2, (String)model.getValueAt(i, 1));  // LastName
                ps.setString(3, (String)model.getValueAt(i, 2));  // Sport
                ps.setInt(4, (int)model.getValueAt(i, 3));  // NumYears
                ps.setBoolean(5, (boolean)model.getValueAt(i, 4));  // Vegetarian
                ps.executeUpdate();
            }
        }
        System.out.println("Database updated.");
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}
于 2015-03-11T09:34:03.493 に答える