Java JTable日期格式问题

时间:2015-04-17 01:36:06

标签: java sql jdbc

嘿所有我正在设计一个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,或者有更容易的方法来解决这个问题?非常感谢任何帮助,谢谢!

1 个答案:

答案 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)。