当前位置: 首页 > 知识库问答 >
问题:

H2数据库,从表中获取数据时出现问题

卜瀚漠
2023-03-14

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

组织。h2.jdbc。JdbcSQLException:未找到表“touch”;SQL语句:从讲座[42102-192]中选择名称

我100%确定我连接到数据库并且表肯定在那里,对为什么会这样有任何建议吗?

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

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个答案

华永新
2023-03-14

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

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

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

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

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

 类似资料:
  • 我目前正在Android中使用静态编程语言进行培训,每当我试图访问Firebase数据库中当前的数据时都会遇到问题。下面是数据库中的数据: 数据库映像 之后,在将应用程序链接到Firebase之后,我刚刚创建了一个包含所有必需导入的主活动,但不幸的是,每当我执行应用程序并按下按钮时,什么都没有发生。 日志没有出现任何时间,它真的很烦人,因为我在留档中搜索,据我所知,这是我应该做的一切(我还检查了数

  • 我有一个独立的H2服务器,正在收集数据。为了进行测试,我希望将数据从服务器中提取到CSV文件中。有什么工具吗?

  • 问题内容: 我已经搜索了许多网站,但没有遇到任何从单个数据库获取表名的细节的代码或教程。 假设我有4个数据库,并且我想要数据库中所有表的名称,我可以使用什么查询? 问题答案:

  • 本文向大家介绍node.js从数据库获取数据,包括了node.js从数据库获取数据的使用技巧和注意事项,需要的朋友参考一下 本文需要用node.js做一个从Sqlserver获取数据并显示到页面上的小功能,下面就为大家分享: app.js: 接下来就直接在页面中使用get方式请求即可,当然post方式也是类似原理。 还有我发现textarea控件在改变其text和html属性的时候,value还保

  • 问题内容: 我有2种情况,我要在codeigniter中提取同一表的全部数据和行总数,我想知道那是一种方法,可以从中获取行总数,整个数据和3个最新插入的记录通过一个代码在同一张桌子上 两种情况的控制器代码如下(尽管我分别使用不同的参数将其应用于每种情况) 1)从codeigniter中的表中获取全部数据 型号代码 查看代码 2)在Codeigniter中从表中获取行数 查看代码 问题答案: 您只能

  • 我正在尝试获取我的用户名,并在应用程序打开时向他/她问好。但我无法根据某个用户的uid获取数据。当我运行应用程序时,祝酒词从未真正出现。 数据库结构 密码