java.sql.SQLException: 没有这样的列和 false Period getDays 结果
java.sql.SQLException: no such column and false Period getDays result
我是 java 初学者,遇到两个问题。
1) SQL 异常:没有这样的列 'Ofen'
这是我的代码,我想从名为 "kleintest.db" 的 SQLite 数据库中获取特定数据,其中包含 2 tables "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();
}
}
table 主数据包含以下项目:
Laufnummer Ofen Zahlwert Startdatum
但是 Laufnummer 只是一个主键,不应该被检索。
2) 下一题是句号函数。这工作得很好,但作为打印结果,我会得到 P 1D 或 P 1M 2D 看起来有点混乱。我喜欢只打印简单的天数,例如 45 或 45D,并将 getDays() 添加到我的 DiffTag。现在我的结果是 -1,这完全没有意义。这里有什么问题?
Period DiffTag = Period.between(heute, Wägetag);
System.out.format("Tage = " + DiffTag.getDays() + "\n");
感谢您提供我可能错过的建议和链接。但是到目前为止我所看到的一切都没有指出我的具体问题。
您一次只能为 Statement 对象打开一个结果集,因此当您再次执行第二个查询时 "Zahlwertuntertable" 第一个结果集将关闭。
因此要么添加另一条语句,要么一次处理一个查询。
此外,现在您调用 rs.next() 但从未调用 rs2.next()
看起来很奇怪
我是 java 初学者,遇到两个问题。
1) SQL 异常:没有这样的列 'Ofen'
这是我的代码,我想从名为 "kleintest.db" 的 SQLite 数据库中获取特定数据,其中包含 2 tables "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();
}
}
table 主数据包含以下项目: Laufnummer Ofen Zahlwert Startdatum
但是 Laufnummer 只是一个主键,不应该被检索。
2) 下一题是句号函数。这工作得很好,但作为打印结果,我会得到 P 1D 或 P 1M 2D 看起来有点混乱。我喜欢只打印简单的天数,例如 45 或 45D,并将 getDays() 添加到我的 DiffTag。现在我的结果是 -1,这完全没有意义。这里有什么问题?
Period DiffTag = Period.between(heute, Wägetag);
System.out.format("Tage = " + DiffTag.getDays() + "\n");
感谢您提供我可能错过的建议和链接。但是到目前为止我所看到的一切都没有指出我的具体问题。
您一次只能为 Statement 对象打开一个结果集,因此当您再次执行第二个查询时 "Zahlwertuntertable" 第一个结果集将关闭。
因此要么添加另一条语句,要么一次处理一个查询。
此外,现在您调用 rs.next() 但从未调用 rs2.next()
看起来很奇怪