使用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中选择两个日期之间的行的主要内容,如果未能解决你的问题,请参考以下文章
BETWEEN Two Dates 返回相同两个日期的行,而不是返回之间的行