使用java在sqlite中选择两个日期之间的行

Posted

技术标签:

【中文标题】使用java在sqlite中选择两个日期之间的行【英文标题】:select rows between two dates in sqlite using java 【发布时间】:2020-01-01 23:12:26 【问题描述】:

。 当我尝试从 javafx 程序中的 sqlite 数据库中检索到两个日期之间的行时,即使有多行,我总是从整行中获取一行,它选择第一行并丢弃剩余的或根本不包含在结果集中,如何解决这个问题,数据库有一些记录,但查询总是返回第一个

@FXML
private void report(ActionEvent event)

    if(searchfromDate.getValue() != null && searchToDate.getValue() != null)
    
        try
        
            DBconnector.connect();

            LocalDate startDate = searchfromDate.getValue();
            LocalDate endDate = searchToDate.getValue();

            String query = "select * from selled where date between '" + startDate
                           + "' and '" + endDate + "'";
            ResultSet rs = DBconnector.query(query);
            Alert alert = new Alert(AlertType.INFORMATION);

            JSONObject file = new JSONObject();

            if(rs.next())
            
                int id = rs.getInt("id");
                String customer = rs.getString("costomer");
                String name = rs.getString("name");
                String barcode = rs.getString("barcode");
                int amount = rs.getInt("amount");
                LocalDate date = LocalDate.parse(rs.getString("date"));
                double price = rs.getDouble("price");
                String garentee = rs.getString("garentee");

                file.put("id", id);
                file.put("customer", customer);
                file.put("name", name);
                file.put("barcode", barcode);
                file.put("amount", amount);
                file.put("date", date);
                file.put("price", price);
                file.put("garentee", garentee);
            

            FileWriter writer = new FileWriter("تقرير المبيعات.json");

            writer.write(file.toString());
            writer.flush();
            writer.close();

            alert.setTitle("رسالة تاكيد");
            alert.setHeaderText(null);
            alert.setContentText("تم استخراج الملف بنجاح");
            alert.showAndWait();

            Desktop desktop = Desktop.getDesktop();
            desktop.browse(new URI("https://arabsefr.com/save-report?fbclid=IwAR2ON1Tl8ETQ--3QEAVFJLMjTuWUhpLCZrD3PXhg8TZpdlUH4umKBfl78OM"));
        

        catch (Exception ex)
        
            System.out.println(ex);
        
    

    else
    
        Alert alert = new Alert(AlertType.INFORMATION);

        alert.setTitle("رسالة تاكيد");
        alert.setHeaderText(null);
        alert.setContentText("لم يتم تحديد التاريخ");
        alert.showAndWait();
    

【问题讨论】:

如果您尝试使用PreparedStatement 会怎样? 如果你想要多行,我怀疑if 不是你想要使用的。 是的,我用这个 它总是返回第一条记录而忽略另一条记录? 啊,@Shawn 是正确的。您正在使用if (rs.next()) ... ,但您想使用while (rs.next()) ... 。请记住,ResultSet 有一个游标,每次调用 next(),并且该方法返回 true,它会将游标前进到下一行。由于if 只会检查一次条件,因此您只处理结果集的一行。 【参考方案1】:

当您使用 SQLite 时,始终建议使用 strftime() 方法,同时使用日期进行操作,这样可以确保避免未来的麻烦。

strftime('%s', startDate) 和 strftime('%s', endDate) 之间的哪里 strftime('%s', date)

【讨论】:

以上是关于使用java在sqlite中选择两个日期之间的行的主要内容,如果未能解决你的问题,请参考以下文章

两个日期之间的Sqlite比较[重复]

如何从sqlite中选择一个日期

BETWEEN Two Dates 返回相同两个日期的行,而不是返回之间的行

Android - SQLite - 在 Date1 和 Date2 之间选择

选择不在日期之间的行(保留)

Pandas Dataframe 保留日期在两个日期之间的行(单独的列)