0

我在网上搜索并没有找到任何相关信息。我在 JTable 中有一组记录,我需要将这些记录导出到 MS Access 数据库中的现有表中。我需要能够将记录附加到此表,因为可能已经存在数据。

在过去的两天里,我一直在阅读和学习 Jackcess 和 UcanAccess 库。在这一点上,我完全被淘汰了,所以如果有人愿意发布一些代码,我将非常感激。

编辑:5:15 PM PT Monolithic 任务肯定。感谢大家的有益建议。我刚刚设法找到了解决方案。我读了一篇文章,帮助我了解 jTable 的内容实际上仅用于显示目的,而不是用于将数据集导出到其他数据库的理想来源。所以我使用Jackcess库中的ImportUtil直接将ResultSet导出到我的Access数据库中。答案一直摆在我面前:http: //jackcess.sourceforge.net/(这是从顶部算起的第四个代码示例)

所以这是我为此创建的 AccessExporter.java 类。它接受三个参数:ResultSet 对象、“TableName”和定义数据库文件所在位置的 File 对象。这是代码:

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

The Java™ Tutorials 中的SimpleTableDemo,它创建并显示这样的 JTable

基本表.png

包含一个名为printDebugData将表数据写入控制台的方法。我们可以调整该代码以将表数据写入 Access 数据库。

我们假设您已下载 UCanAccess并将所需的引用添加到您的项目中,如图所示

在没有 ODBC 的情况下从 Java 操作 Access 数据库

我们还将假设您的 Access 数据库中已经有一个名为 [SimpleTableDemo] 的表,其中包含字段

ID - 自动编号,主键
FirstName - Text(255)
LastName - Text(255)
Sport - Text(255)
NumYears - Number(Long Integer)
Vegetarian - Yes/No

中的第一行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 回答