H2 数据库,从表中获取数据的问题

Posted

技术标签:

【中文标题】H2 数据库,从表中获取数据的问题【英文标题】:H2 Database, problems getting data from tables 【发布时间】:2016-07-13 17:16:28 【问题描述】:

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

org.h2.jdbc.JdbcSQLException:找不到表“LECTURE”; SQL 声明:从讲座中选择名称 [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】:

如果它说表不存在,那么它真的不存在。

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

现在可能为时已晚(因为可能已经在某处创建了第二个数据库),但为了避免这种混淆,在连接字符串中包含 IFEXISTS=TRUE 是一个不错的主意,这样如果数据库没有,它就会失败不存在,而不是创建一个可以掩盖真正问题的空洞。

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

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

【讨论】:

但它使用我创建的密码和用户名连接到数据库,以及我通过单击数据库并从属性中获取的数据库路径,在下拉列表中有桌子。 今天才开始工作,一定是我的IDE在玩。

以上是关于H2 数据库,从表中获取数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 模型获取数据时没有从表中获取结果

如何从表中逐块获取数据?

从表中获取数据的困难

EF - 从表中获取数据给出空值

Lua如何从表中获取数据

Jsoup:从表中获取数据