从具有日期条件的数据库中选择值

时间:2014-05-27 12:44:33

标签: java database date jtable jcombobox

我有一个包含月份的JComboBox(9月,7月......) 还有一个jTable 数据库中的表(Bills)包含(Id bill,date,products ..)

我希望当从9月份的jComboBox中选择一个值时,它会在9月份为我提供所有产品。

日期格式如2014 / May / 27 14:31:04

我尝试了这段代码,但它没有用,因为在java中我无法使用:

String sql1 = "select Products from Bills where Date LIKE "?????+jComboBox1.getSelectedItem()+*" ";

(它出错,我无法编译)

代码:

try

{

    Class.forName(driver).newInstance();

    Connection con = (Connection)DriverManager.getConnection(url,user,pass);

    String sql1 = "select Products from Bills where Date LIKE "?????+jComboBox1.getSelectedItem()+* " ";

    PreparedStatement pst = con.prepareStatement(sql1);

    ResultSet rs = (ResultSet) pst.executeQuery(sql1);

    jTable1.setModel(DbUtils.resultSetToTableModel(rs));

}
catch( Exception e){

    JOptionPane.showMessageDialog(null, e);

}

2 个答案:

答案 0 :(得分:0)

String sql1 = "select Products from Bills where Date LIKE "?????+jComboBox1.getSelectedItem()+* " ";

为什么会那样?有什么问题?

应该是这样的:

String sql1 = "select Products from Bills where Date LIKE '"+jComboBox1.getSelectedItem()+ "'";

答案 1 :(得分:0)

你正在比较苹果和梨。日期只能与匹配类型进行比较。因此,如果列的类型为date,则不能对其使用字符串比较(实际上是LIKE)。

您准备好的陈述应该看起来是分类

...
Date d = new SimpleDateFormat("yyyy/mm/dd hh:mm:ss").parse(jComboBox1.getSelectedItem());
PreparedStatement pst = con.prepareStatement("SELECT PRODUCTS FROM BILLS WHERE DATE = :dv");
pst.setDate("dv", d);
...

否则,您将在创建无效SQL时遇到麻烦,或者更糟糕的是 - 使您的软件因SQL注入而受到威胁(安全问题)。

编辑:日期算法总是提出数据库供应商的特殊风格。您应该检查DB手册以获取正确的操作数。例如,DB2允许内联转换没有任何操作数的日期。有关示例,请参阅SQL query to select dates between two dates