Java JTable日期格式问题



大家好,我正在设计一个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

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

DB中的列是Date类型,我没有将其从默认值更改为'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 command not properly ended,但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)。

最新更新