-1

我正在使用 JDBC 连接和 Java Swing UI,并且在那里我使用了 Sqlite DB。
在这里,我有一个 java 组件,它是 jCalender 来提取日期,我将日期选择为字符串。


首先我将字符串转换为 java.util 日期,然后我将 java.util.date 转换为 java.sql.date 但我的日期字符串格式是“dd/MM/YYYY”&

然后
DateFormat 格式 = new SimpleDateFormat("dd/MM/YYYY", Locale.ENGLISH);

我设置了上面写的特定日期格式。但是当我在日期之间搜索记录时仍然存在问题。

在这里,我附上了一份代码,请帮助我,这非常重要。



    String from_date = ((JTextField) txt_bilty_date_start.getDateEditor().getUiComponent()).getText();
    String to_date = ((JTextField) txt_bilty_date_end.getDateEditor().getUiComponent()).getText();

    DateFormat format = new SimpleDateFormat("dd/MM/YYYY", Locale.ENGLISH);
    Date date1 = format.parse(from_date);
    Date date2= format.parse(to_date);

    java.sql.Date sqlDate1 = new java.sql.Date(date1.getTime());
    java.sql.Date sqlDate2 = new java.sql.Date(date2.getTime());

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/YYYY");

    System.out.println("\t\tafter change date");
    System.out.println(sdf.format(sqlDate1));
    System.out.println(sdf.format(sqlDate2));

    String sql = "select * from employee where record_date BETWEEN '"+sdf.format(sqlDate1)+"' AND '"+sdf.format(sqlDate2)+"' ";

    pst=conn.prepareStatement(sql2);
    rs = pst.executeQuery();
    tbl_employee.setModel(DbUtils.resultSetToTableModel(rs));
4

1 回答 1

2

假设您的 record_date是数据库中的 SQL 日期(而不是一些 varchar),请使用适当的PreparedStatement.

String sql = "select * from employee where record_date BETWEEN ? AND ?";
pst=conn.prepareStatement(sql2);
pst.setDate(1, sqlDate1);
pst.setDate(2, sqlDate2);
rs = pst.executeQuery();

请注意,使用Java 7 中引入的try-with-resource,整个 try/catch/check for closed in finally 变得更加容易。

如果您的日期是 varchar,您将需要颠倒您的字段顺序,以将最重要的字段放在前面 -yyyy MM dd以某种方式。只有这样,String/VARCHAR比较的结果才会像在字符串的字符串表示上那样工作。

于 2016-02-02T07:20:28.930 回答