java.sql.SQLException:没有这样的列和false Period getDays结果

时间:2018-03-06 10:40:48

标签: java sqlite javafx localdate

我是一名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");

感谢您可能错过的建议和链接。但到目前为止我所看到的一切都没有指出我的具体问题。

1 个答案:

答案 0 :(得分:1)

对于Statement对象,您一次只能打开一个结果集,因此当您再次执行第二个查询时,“Zahlwertuntertable”将关闭第一个结果。

所以要么添加另一个语句,要么一次处理一个查询。

另外,现在看起来很奇怪你调用rs.next()但从不调用rs2.next()