嘿所有我正在设计一个GUI,它将显示一个JTable(使用SQL语句直接从我的数据库(Oracle)填充到Select X表),然后为表格提供一堆排序函数,等等。 / p>
我想要的是Date范围说明符。所以,如果我有一个这样的表:
File | Date
------|-------
01 | 01-FEB-15
02 | 02-FEB-15
03 | 03-FEB-15
04 | 01-MAR-15
05 | 01-APR-15
我有2个文本框供用户输入开始日期和结束日期,然后表格将更新为仅显示日期在该范围内的文件。
我的数据库中的列是Date类型,我没有将它从默认值更改为所以它应该是格式:'YYYY-MM-DD'
我正在使用JDBC通过Java App连接到我的数据库,并将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查询字符串似乎没有错。我觉得我没有正确使用Date Formatter,或者有更容易的方法来解决这个问题?非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
使用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)。