有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jdatechooser作为mysql查询中的参数

在jdatechooser中的日期将作为我的参数的地方,我可以查询该语句的正确方法是什么

 DefaultTableModel model= (DefaultTableModel)DisplayRecieveTB.getModel();
        DisplayRecieveTB.revalidate();
        model.getDataVector().removeAllElements();

        try{

            String date = DateChooserRS.getDate().toString();

         stmt = conn.createStatement();
     stmt.executeQuery("SELECT *FROM supplyrecievable where recievedate = '"+date+"' ");
     rs = stmt.getResultSet();
        while (rs.next()) 
        {
                    String r1 = rs.getString("itemname");
                    String r2 = rs.getString("itemgroup");
                    String r3 = rs.getString("itemcount");
                    String r4 = rs.getString("totalcost");
                    String r5 = rs.getString("itemcode");
                   model.addRow(new Object[] {r5,r1,r2,r3,r4}); 
                   DisplayRecieveTB.revalidate(); 

        }
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }

共 (1) 个答案

  1. # 1 楼答案

    1. 使用PreparedStatement
    2. 不要将Date值转换为String,结果值很可能是不可比较的(如果数据库列不是日期或时间戳类型,那么就错了)

    例如

    DefaultTableModel model = (DefaultTableModel) DisplayRecieveTB.getModel();
    DisplayRecieveTB.revalidate();
    model.getDataVector().removeAllElements();
    
    try {
    
        Date date = DateChooserRS.getDate();
    
        try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM supplyrecievable where recievedate = ?")) {
            // You can also use a java.sql.Timestamp if the column is of the correct type
            stmt.setDate(1, new java.sql.Date(date.getTime()));
            try (ResultSet rs = stmt.executeQuery()) {
                while (rs.next()) {
                    String r1 = rs.getString("itemname");
                    String r2 = rs.getString("itemgroup");
                    String r3 = rs.getString("itemcount");
                    String r4 = rs.getString("totalcost");
                    String r5 = rs.getString("itemcode");
                    model.addRow(new Object[]{r5, r1, r2, r3, r4});
                    // This is pointless, as the model should notifty the table it needs to be updated
                    //DisplayRecieveTB.revalidate();
    
                }
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
    

    这是假设数据库列类型与java.sql.Date值兼容

    有关详细信息,请参见Using Prepared Statements