我是一名java初学者并且遇到两个问题。
1)SQL异常:没有这样的列'Ofen'
这是我的代码,我希望从名为“kleintest.db”的SQLite数据库中获取具有2个表“maindata”和“Zahlwertuntertable”的特定数据。 maindata包含'Ofen'条目为TEXT。 ResultSet rs通常应该从maindata中获取所有数据,而ResultSet rs2应该从Zahlwertuntertable获取权重。但是现在运行程序会显示上述错误。
public static void readDB() {
try {
Statement stmt = connection.createStatement();
//ResultSet rs = stmt.executeQuery("SELECT * FROM Gewichtsabnahme;");
ResultSet rs = stmt.executeQuery("SELECT * FROM maindata;");
ResultSet rs2 = stmt.executeQuery("SELECT * FROM Zahlwertuntertable;");
while (rs.next()) {
System.out.println("Ofen = " + rs.getString("Ofen"));
System.out.println("Platznummer = " + rs.getInt("Zahlwert"));
System.out.println("Startdatum = " + rs.getString("Startdatum"));
LocalDate heute = LocalDate.now();
String Datum = rs.getString("Startdatum");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
LocalDate Wägetag = LocalDate.parse(Datum, formatter);
Period DiffTag = Period.between(heute, Wägetag);
System.out.format("Tage = " + DiffTag.getDays() + "\n"); //
System.out.println("Gewicht = " + rs2.getInt("Startgewicht"));
}
rs.close();
rs2.close();
connection.close();
} catch (SQLException e) {
System.err.println("Zugriff auf DB nicht möglich.");
e.printStackTrace();
}
}
表maindata包含以下项目: Laufnummer Ofen Zahlwert Startdatum
但是Laufnummer只是一个主键,不应该被检索。
2)Next Question是具有Period功能的东西。这很好但是作为打印结果我会得到P 1D或P 1M 2D看起来有些混乱。我喜欢打印像45或45D这样简单的天数,并将getDays()添加到我的DiffTag中。现在我的结果是-1,什么都没有意义。这有什么不对?
Period DiffTag = Period.between(heute, Wägetag);
System.out.format("Tage = " + DiffTag.getDays() + "\n");
感谢您可能错过的建议和链接。但到目前为止我所看到的一切都没有指出我的具体问题。
答案 0 :(得分:1)
对于Statement对象,您一次只能打开一个结果集,因此当您再次执行第二个查询时,“Zahlwertuntertable”将关闭第一个结果。
所以要么添加另一个语句,要么一次处理一个查询。
另外,现在看起来很奇怪你调用rs.next()但从不调用rs2.next()