java - 数据库更新和可排序 JTable 问题

标签 java swing sqlite netbeans-7

我编写了一个自定义 JTable 来在 Java 程序中显示 SQLite 数据库的内容。代码如下:

public class SortableJTable extends JTable{

public SortableJTable()
{
    super();
}

public SortableJTable(DefaultTableModel dtm)
{
    super(dtm);
}

@Override
public void setValueAt(Object obj, int row, int col)
{
    super.setValueAt(obj, row, col);
    PRGView.dbc.updateOrdersWithTicketRequestID(this.getColumnName(col).toString(), obj, (Integer)this.getValueAt(row, 0));
}

@Override
public Class getColumnClass(int c) 
{
    switch (c)
    {
        case 0:
            return Integer.class;
        case 1:
            return Integer.class;
        case 2:
            return String.class;
        case 3:
            return String.class;
        case 4:
            return Double.class;
        case 5:
            return Double.class;
        default:
            return String.class;
    }
}
}

正如您所看到的,我希望每当有人编辑自定义 JTable 中的单元格(即调用 setValueAt 方法时)时,我都能够立即修改数据库内容以反射(reflect)这些更改。

这是在该方法中调用的数据库代码。

public void updateOrdersWithTicketRequestID(String columnName, Object columnValue, Integer ticketRequestID)
{
    try
    {
        String sql = "UPDATE ORDERS SET ? = ? WHERE Ticket_Request_ID = ?";

        pstmt = conn.prepareStatement(sql);

        pstmt.setString(1, columnName);
        pstmt.setObject(2, columnValue);
        pstmt.setInt(3, ticketRequestID);

        pstmt.executeUpdate();
        pstmt.close();
    }
    catch (SQLException e){}
}

一旦我的代码到达此语句:

 pstmt = conn.prepareStatement(sql);

在上面的代码中,它返回错误:SQL错误或缺少数据库(“?”附近:语法错误)。

我有两个问题:

1) 为什么我会收到此错误消息? (我是否错误地执行了准备好的语句?)

2) 我的自定义 JTable 类中的 getColumnClass 未正确对我的列进行排序。它们总是按字符串顺序排序,而不是使用我布置的 switch case。我这样做错了吗?

感谢您的帮助!

最佳答案

1) Why am I getting this error message? (Am I doing the prepared statement incorrectly?)

我对 SQL 不太了解,所以我只是提出一些建议:

  1. catch (SQLException e){} - 打印出 SQLException。
  2. 此外,如果您不确定PreparedStatement 是否正确。然后尝试使用 SQL 字符串中的硬编码值来调用 SQL。一旦硬编码 SQL 工作,您就可以将其转换为PreparedStatement。

The getColumnClass in my custom JTable class is not sorting my columns correctly

排序器使用的Comparator实际上是基于TableModel的getColumnClass()方法,而不是JTable。

因此您需要重写 TableModelgetColumnClass(...) 方法。我还将重写 TableModel 中的 setValueAt(...) 方法,以将所有重写保留在一个类中。

编辑:

您可能无法将列名指定为变量。我过去曾成功地使用过这样的代码:

String sql = "UPDATE Page SET Title = ? WHERE Name = ?";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, "update" );
stmt.setString( 2, "Name3" );
stmt.executeUpdate();
stmt.close();

同样,首先尝试使用硬编码值。

关于java - 数据库更新和可排序 JTable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102007/

相关文章:

java - 创建具有三个相关列表的 JDialog

c# - sqlite-net 更新方法如何工作?

javascript - SQLITE TABLE 创建错误

java - 我想从特定位置删除文件,但它不从该位置删除文件

java - annotation - 如何加载 Spring 配置类?

java - 输入 validator 单元格编辑器

iphone - 将 UISeachBar 与 SQLite3 结合使用

java - 不可解析的日期异常 - 月日期格式

java - Spring分布式事务涉及RMI调用可能吗?

java - 如何让右侧JPanel始终显示