Java JTable 导出到现有的 MS Access 表

Posted

技术标签:

【中文标题】Java JTable 导出到现有的 MS Access 表【英文标题】:Java JTable Exported to Existing MS Access Table 【发布时间】:2015-03-10 23:41:33 【问题描述】:

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

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

编辑:太平洋时间下午 5:15 肯定是单片任务。感谢大家的有益建议。我刚刚设法找到了解决方案。我读了一篇文章,帮助我理解 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());
           
        

【问题讨论】:

您对这个整体解决方案的哪个部分有疑问?请记住,我们是志愿者,没有太多时间为您编写解决方案…… 您还需要提供更多信息。数据库表的结构是什么? JTable 是什么结构?两者有什么关系? 【参考方案1】:

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

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

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

Manipulating an Access database from Java without ODBC

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

ID - 自动编号,主键 名字 - 文本(255) 姓氏 - 文本 (255) 运动 - 文字(255) NumYears - 数字(长整数) 素食 - 是/否

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);
    

【讨论】:

以上是关于Java JTable 导出到现有的 MS Access 表的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 python pandas 数据帧导出或写入 MS Access 表

java 查询将JTable导出到Excel文件中

如何附加到现有的 java.io.ObjectStream? [复制]

如何将 Oauth2.0 合并到现有的 Java Spring Web MVC 和 REST 项目中?

将 React Native 代码集成到现有的 android 项目中

如何将 JPA 添加到现有的 Eclipse 项目?