从 RestulSet 表编辑 JTable

Posted

技术标签:

【中文标题】从 RestulSet 表编辑 JTable【英文标题】:Editing JTable from RestulSet Table 【发布时间】:2010-02-22 04:11:15 【问题描述】:

继续this 问题。

我的问题是我无法编辑我的 JTable。我得到一个异常和 Object 值,而不是我应该看到的。

我将ResultSet Table 代码与MS-Access 数据库一起使用并进行了一些修改。我的代码可以在here 找到。调用 rs.updateRow() 时遇到错误。 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Error in row.

我用updateRow() 对这个错误进行了谷歌搜索,但没有找到太多。我看到的唯一真正的答案是使用准备好的语句,但我不是 SQL 命令的专家。

如果您能告诉我将其变为 GlazedList 的最佳方法,那么我也可以轻松过滤。除非你能给我提供一些可以轻松过滤常规 JTable 的东西。

【问题讨论】:

好的。我可以轻松地显示数据库,但不使用 SQL 命令对其进行编辑几乎是不可能的。我需要编辑哪些 SQL 命令? @twodayslate: UPDATE tableName(columnName1,columnName2,etc) SET columname2 = column2value WHERE columnName1=row_value -- 假设 columnName1 是主键列。我认为问题仍然在于您的 JDBC 驱动程序不支持可更新的 ResultSets。 如何获得支持的驱动程序?在看到您的回答之前,我制作了一个支持编辑表格的新 TableModle。但是,它不反映对数据库的更改。然而。 resultSet 方法是否在没有 SQL 命令的情况下将更改放入表中? @twodayslate:实际上,现在我认为原始代码的问题可能是语句配置为生成结果集的方式以及指定的选项。但是,要实际修改数据,您必须在可更新的 ResultSet 上使用 updateRow/insertRow/deleteRow 或使用 SQL。即使您使用 SQL,ResultSet 也可能不会真正反映更改本身。正如我还发现的那样,获取反映数据库更改并可以修改数据库的表非常复杂。这只是一个史诗般的 Swing/AWT/Java 失败。 ResultSets 的想法似乎很完美,但我想它们在实践中行不通...... :( 【参考方案1】:

尝试提供更多帮助,因为最初的解决方案没有 100% 有效。

试试这里的信息:Updatable ResultSets,看看如何在从 Connection 创建 Statement 对象时通过指定参数使您的 ResultSet 可更新。我意识到默认情况下可能没有为您设置此选项。如果您的驱动程序支持这种模式,它应该允许代码工作。

编辑: 它不一定是驱动程序(尽管如果您想更改它,您将需要一个 JAR)。您需要在创建表时启用ResultSet.TYPE_SCROLL_SENSITIVE - 驱动程序可能仍然支持此模式。有一些方法可以探查 JDBC 驱动程序支持的内容,但是除非您使用像 SquirrelSQL Client 这样的 GUI 来获取完整的功能列表,否则使用起来会很痛苦。

【讨论】:

感谢您一直以来的帮助!我将如何更改驱动程序?我目前正在使用sun.jdbc.odbc.JdbcOdbcDriver。我尝试使用com.pointbase.jdbc.jdbcDriver,但它不起作用。我需要一个罐子吗?在您提供的链接中 - 我的程序在 ResultSet.TYPE_FORWARD_ONLY 处抛出了一个错误,所以一定是导致问题的驱动程序? 当我将它更改为 SENSITIVE 时,我仍然收到错误行。当你的代码工作时......你使用了什么驱动程序?在示例中,他们使用了 com.pointbase.jdbc.jdbcDriver 但我找不到 MS-Access 的 jar。 我使用的是 H2 DBMS 驱动程序...不会用 3 米长的杆接触 Access。要使我的版本正常工作,您绝对必须为 Access 找到支持更多 JDBC 功能的 JDBC 驱动程序(是的 JAR)。听起来您的 Access 驱动程序非常简单。【参考方案2】:

我正在使用 ResultSet Table 代码

在网络上搜索更好的 ResultSetTableModel 示例。我相信您会找到一个已经实现 setValueAt(...) 方法的方法。或者另一种方法是将 ResultSet 中的数据复制到 DefaultTableModel 中,然后您可以毫无问题地对其进行编辑。

除非你能给我提供一些可以轻松分类常规 JTable 的东西。

您是否阅读过 JTable API 并点击“如何使用表”的 Swing 教程链接,其中包含排序的工作示例,因为排序是 JDK 的默认部分。

【讨论】:

哎呀。我的意思是过滤多个值。 DefaultTableModel 方法会使数据库保持最新状态吗?我仍然收到谷歌搜索的错误 setValueAt 本教程展示了如何进行过滤。不, DefaultTableModel 不会自动更新数据库(但您当前的模型也不会)。只需将 TableModelListener 添加到模型中,您就可以自己更新数据库。否则,我认为您需要获得第 3 方包来支持这一点。 你知道任何可以完成所有这些的第三方包吗?

以上是关于从 RestulSet 表编辑 JTable的主要内容,如果未能解决你的问题,请参考以下文章

仅在选择时设置Jtable单元格可编辑

如何使用自定义 JTable 单元格编辑器和单元格渲染器

已编辑将 JTable 写入 Excel

将编辑过的单元格从 JTable 保存到数据库

如何在编辑时选择JTable单元格中的所有文本

禁用JTable中的用户编辑