gpt4 book ai didi

Java JTable 导出到现有的 MS Access 表

转载 作者:行者123 更新时间:2023-12-01 11:48:18 25 4
gpt4 key购买 nike

我在网上搜索了一下,没有发现任何相关内容。我的 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());
}
}
}

最佳答案

SimpleTableDemo来自 Java™ 教程,它创建并显示如下所示的 JTable

BasicTable.png

包含一个名为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 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com