java.sql.SQLException:没有这样的列,并且周期getDays结果为false
我是一名java初学者,正在努力解决两个问题 1) SQL异常:没有这样的列“Ofen” 这是我的代码,我想从名为“kleintest.db”的SQLite数据库中获取特定数据,该数据库有两个表“maindata”和“Zahlwertuntertable”。maindata以文本形式包含“Ofen”条目。结果集rs通常应该从maindata中获取所有数据,结果集rs2应该从Zahlwertuntertable中获取权重。但是现在运行程序会显示上面提到的错误java.sql.SQLException:没有这样的列,并且周期getDays结果为false,java,sqlite,javafx,localdate,Java,Sqlite,Javafx,Localdate,我是一名java初学者,正在努力解决两个问题 1) SQL异常:没有这样的列“Ofen” 这是我的代码,我想从名为“kleintest.db”的SQLite数据库中获取特定数据,该数据库有两个表“maindata”和“Zahlwertuntertable”。maindata以文本形式包含“Ofen”条目。结果集rs通常应该从maindata中获取所有数据,结果集rs2应该从Zahlwertuntertable中获取权重。但是现在运行程序会显示上面提到的错误 public static void
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只是一个主键,不应该被检索
2) 下一个问题是周期函数。这工作得很好,但作为一个打印结果,我会得到p1d或p1m2d,看起来有点混乱。我喜欢只打印简单的天数,比如45天或45天,并将getDays()添加到DiffTag中。现在我的结果是-1,这是毫无意义的。这里怎么了
Period DiffTag = Period.between(heute, Wägetag);
System.out.format("Tage = " + DiffTag.getDays() + "\n");
谢谢你的建议和链接,我可能错过了。但是到目前为止,我所看到的一切都没有指出我的具体问题。对于一个语句对象,一次只能打开一个结果集,因此当您再次执行“Zahlwertuntertable”中的第二个查询时,第一个结果集将关闭 因此,要么添加另一条语句,要么一次处理一个查询
另外,现在调用rs.next()而从不调用rs2.next()编辑您的问题并包含以最小方式格式化的表定义,这看起来很奇怪。错误是您的
maindata
表没有名为Ofen
的列。此外,如果要访问第二个结果集,需要调用rs2.next()
。您可能不应该同时在这两个表上循环。表maindata
是如何创建/更改的?什么是ResultSetMetaData meta=rs.getMetaData();对于(int i=1;i BTW:Period的第一个参数。between
是Period的开始,而不是结束。假设保存到db的日期是过去的,您需要交换参数。请注意,尽管此Period
不允许您计算总天数,请参阅OK,我添加了maindata表的内容并我将更改对rs2的调用。也将处理句点问题。感谢您的输入。请针对每个问题提出一个问题。将第二个问题移至单独的问题。啊,非常感谢。这就是重点。我将ResultSet rs2=stmt.executeQuery(“SELECT*FROM Zahlwertuntertable;”)设置在rs.close()下现在它又起作用了,时间也起作用了。