tl;博士
将IFEXISTS=TRUE 添加到您的连接 URL 字符串中。
H2 创建数据库,如果不存在
你问:
我需要知道如何查找典型的学生数据库是否存在。因此,如果它不存在,则必须创建它,否则程序应该继续现有的。
默认情况下,如果数据库不存在,H2 会自动创建数据库。所以你问题的那部分没有意义。
指定文件位置作为建立DataSource 对象的一部分。这里我们使用org.h2.jdbcx.JdbcDataSource作为javax.sql.DataSource的实现。
private javax.sql.DataSource establishDataSource() {
org.h2.jdbcx.JdbcDataSource ds = Objects.requireNonNull( new JdbcDataSource() ); // Implementation of `DataSource` bundled with H2. You may choose to use some other implementation.
ds.setURL( "jdbc:h2:/path/to/MyDatabase;" );
ds.setUser( "scott" );
ds.setPassword( "tiger" );
ds.setDescription( "An example database." );
return ds ;
}
实例化一个DataSource 对象。保留它以供需要访问数据库时使用。
DataSource dataSource = this.establishDataSource();
…
DataSource 对象不会导致任何事情发生。 DataSource 对象仅包含定位和连接到特定数据库所需的信息。
尝试连接到数据库。这是事情开始发生的时候。
try(
Connection conn = dataSource.getConnection() ;
)
{ … }
第一次调用 DataSource#getConnection 导致 H2:
- 在文件系统中的指定位置建立一个新的数据库文件(如果尚不存在)。
- 打开与数据库的连接。
但要回答问题的标题,请继续阅读。
IFEXISTS
您可以在连接尝试中指定只有在请求的数据库已经存在时才应完成连接。此功能使用IFEXISTS=TRUE 语法。
String url = "jdbc:h2:/path/to/MyDatabase;IFEXISTS=TRUE";
这会导致 H2:
- 在给定位置查找现有数据库。
- 如果没有现有数据库,则抛出异常。
- 如果找到现有数据库,请打开一个连接。
捕获数据库不存在时抛出的异常。
文件
您检查文件系统中是否存在数据库文件,假设您的数据库被持久化到存储中(而不是in-memory database)。