gpt4 book ai didi

Java JTable 日期格式问题

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

嘿,我正在设计一个 GUI,它将显示一个 JTable(使用 SQL 语句直接从我的数据库 (Oracle) 填充以选择 X 表),然后为表提供一堆排序函数等。

我想要的一件事是日期范围说明符。因此,如果我有一个像这样的表:

 File |   Date 
------|-------
01 | 01-FEB-15
02 | 02-FEB-15
03 | 03-FEB-15
04 | 01-MAR-15
05 | 01-APR-15

我有 2 个文本框供用户输入开始日期和结束日期,然后表格将更新以仅显示日期在该范围内的文件。

我的数据库中的列是日期类型,我没有更改默认值,因此它的格式应该是:'YYYY-MM-DD'

我正在使用 JDBC 通过 Java 应用程序连接到我的数据库,并将 SQL 查询传递到数据库,但是在尝试实现此日期范围时,我不断收到错误。

我为尝试完成此任务而编写的一些代码:

JButton btnFetchDates = new JButton("Fetch");
btnFetchDates.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String start = "2015.02.01";
String end = "2015.03.01";
String pattern = "yyyy.MM.dd";
if (comboBoxUsers.getSelectedItem().toString().equals("Bob")){
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
java.util.Date startD = sdf.parse(start);
java.util.Date endD = sdf.parse(end);
String query1 = "SELECT * FROM FILES WHERE USER_ID = 1 AND FILE_DATE > " + "'" + startD + "'" + " AND FILE_DATE < " + "'" + endD + "';";
pat = conn.prepareStatement(query1);
rs = pat.executeQuery();
tableData.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
e.printStackTrace();
}
}
}
});

然而,这只会给我带来错误:ORA-00933: SQL 命令未正确结束,但 SQL 查询字符串似乎没有任何问题。我感觉我没有正确使用日期格式化程序,或者也许有更简单的方法来解决这个问题?任何帮助将不胜感激,谢谢!

最佳答案

使用 PreparedStatement 的占位符(例如查询中的问号) ,通过其 setX 方法设置日期值(其中 X 是占位符的日期类型):

String query1 = "SELECT * FROM FILES WHERE USER_ID = 1 AND FILE_DATE > ? AND FILE_DATE < ?";
PreparedStatement ps = conn.prepareStatement(query1);
ps.setDate(1, startD);
ps.setDate(2, endD);
rs = ps.executeQuery();

请注意,a) setDate 接受 java.sql.Date 对象(扩展了 java.util.Date) b) 根据数据库中的列日期类型,您可能需要在查询中进行类型转换(迄今为止)或java端(使用另一个setX方法 - 例如setTimestamp)。

关于Java JTable 日期格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688733/

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