gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:45:33 24 4
gpt4 key购买 nike

我编写了一个自定义 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/

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