java.sql.SQLException:没有这样的列,并且周期getDays结果为false

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

我是一名java初学者,正在努力解决两个问题

1) SQL异常:没有这样的列“Ofen”

这是我的代码,我想从名为“kleintest.db”的SQLite数据库中获取特定数据,该数据库有两个表“maindata”和“Zahlwertuntertable”。maindata以文本形式包含“Ofen”条目。结果集rs通常应该从maindata中获取所有数据,结果集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只是一个主键,不应该被检索

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()下现在它又起作用了,时间也起作用了。