H2数据库,从表

时间:2016-07-13 17:16:28

标签: java database h2

我正在创建一个JavaFX应用程序,我已经很好地连接到了数据库。但是,当我想从表中获取数据时,我得到了错误

  

org.h2.jdbc.JdbcSQLException:表"讲座"未找到; SQL   声明:SELECT NAME FROM Lecture [42102-192]

并且我100%确定我已连接到数据库并且表格肯定在那里,对此为何有任何建议?

听到我的连接代码和我正在运行的代码,以便您可以看到

public class ConnectionFactory {
    //static reference to itself
    private static ConnectionFactory instance = new ConnectionFactory();
    public static final String URL = "jdbc:h2:file:~/db\\.";
    public static final String USER = "notepad";
    public static final String PASSWORD = "password";
    public static final String DRIVER_CLASS = "org.h2.Driver";

    //private constructor
    private ConnectionFactory() {
        try {
            Class.forName(DRIVER_CLASS);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private Connection createConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            System.out.println("ERROR: Unable to Connect to Database.");
        }
        return connection;
    }

    public static Connection getConnection() {
        return instance.createConnection();
    }
}

正在运行查询

private void onLoadYearSelect() {

    try {
        Connection con = ConnectionFactory.getConnection();
        Statement stat = con.createStatement();
        String query = "SELECT NAME FROM Lecture";
        ResultSet years = stat.executeQuery(query);
        while(years.next()){
            yearSelect.setValue(years.getString("NAME"));
            System.out.println(years.getString("NAME"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
public void initialize(){
    onLoadYearSelect();
}

1 个答案:

答案 0 :(得分:0)

如果表示该表不存在,那么它确实不存在。

最有可能的是,您实际上并未连接到正确的数据库。实际上,默认情况下,如果连接字符串指向不存在的数据库,它只是动态创建一个空数据库,这可以解释您的错误。

现在可能已经太晚了(因为可能已经在某处创建了第二个数据库),但为了避免这种混淆,在连接字符串中包含IFEXISTS=TRUE以使其在数据库中失败并不是一个坏主意不存在,而不是创建一个掩盖真正问题的空白。

public static final String URL = "jdbc:h2:file:~/db\\.;IFEXISTS=TRUE";

但是,您仍然可以尝试调试问题的一件事是将IFEXISTS=TRUE添加到连接字符串。然后移动或重命名它应该连接的数据库 ,以使连接字符串无效。基本上,迫使它失败。如果代码仍然成功连接到数据库,那么您将知道连接字符串未指向您认为的位置。