如何从 Java 和 H2 DB 连接到 H2 数据库

Posted

技术标签:

【中文标题】如何从 Java 和 H2 DB 连接到 H2 数据库【英文标题】:How to connect to H2 database from Java & H2 DB 【发布时间】:2015-12-13 06:35:22 【问题描述】:

我对 Eclipse 和 Java 还很陌生,目前正在从事一个需要实现我的第一个数据库的项目。

因此,我尝试连接 Eclipse 和 H2 数据库。虽然 H2 数据库部分本身工作得很好,但我不知道如何将它连接到 Eclipse。

我创建了以下课程并尝试按照网站上的说明进行所有操作:

package srpTracking;

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.h2.tools.DeleteDbFiles;

public class DatabaseConnector 

    public static void main(String... args) throws Exception 
        DeleteDbFiles.execute("~", "test", true);

        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:~/test");
        Statement stat = conn.createStatement();


        stat.execute("create table test(id int primary key, name varchar(255))");
        stat.execute("insert into test values(1, 'Hello')");
        ResultSet rs;
        rs = stat.executeQuery("select * from test");
        while (rs.next()) 
            System.out.println(rs.getString("name"));
        
    
        stat.close();
        conn.close();
  

我得到最后两行代码的标识符错误,但它也没有连接任何东西。

我将 H2.jar 文件复制到项目文件夹中名为 lib 的子文件夹中。

很遗憾,由于某种原因,我无法安装 DTP 插件,因为我显然缺少一个“org.eclipse.core.runtime”文件。

我需要对连接 Java 和 H2 的代码进行哪些更改? 另外,我是否需要将 H2 文件复制到特定文件夹中?

【问题讨论】:

您正试图将两个完全不同的问题硬塞到一个问题中。您的第一个问题是 stat.close()con.close() 语句在 main 方法之外,因此语法错误:您的代码无法编译。 DTP 插件的问题与 Eclipse 配置/安装问题无关。请编辑您的问题,使其仅限于一个问题,并针对另一个问题提出一个新的、单独的问题。 【参考方案1】:

考虑对您的主目录进行这些更改。通过使用 try-with-resource,您可以将关闭委托给 JVM - 额外的好处是,即使在出现异常的情况下,您也不需要关闭它们。

为什么它以前不起作用?您的变量超出范围 - 您试图在 main() 结束后关闭

public static void main(String... args) throws Exception 
    DeleteDbFiles.execute("~", "test", true);

    Class.forName("org.h2.Driver");
    try (Connection conn = DriverManager.getConnection("jdbc:h2:~/test"); 
            Statement stat = conn.createStatement()) 
        stat.execute("create table test(id int primary key, name varchar(255))");
        stat.execute("insert into test values(1, 'Hello')");
        try (ResultSet rs = stat.executeQuery("select * from test")) 
            while (rs.next()) 
                System.out.println(rs.getString("name"));
            
        
     catch (Exception e) 
        e.printStackTrace();
    

【讨论】:

Class.forName 有什么用?检查驱动是否存在? 直到 Java 6 这触发加载驱动程序类初始化所有静态变量和代码块,允许驱动程序向 JDBC 注册自己。现在它只会触发一个更明显的异常(找不到类),而不是一些模糊的找不到 JDBC URL 的驱动程序。 感谢您的澄清!

以上是关于如何从 Java 和 H2 DB 连接到 H2 数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 play 框架中连接到本地 h2 数据库

使用 RobotFramework 连接到 H2 数据库文件

Java Hibernate - 无法连接到 H2

尝试连接到 Activiti 的 H2 数据库设置时出现异常

无法查看 grails 项目中使用的 h2 db

H2 客户端无法连接到服务器