gpt4 book ai didi

java - 如何在创建新数据库之前检查现有的 h2 数据库

转载 作者:行者123 更新时间:2023-11-29 10:10:23 26 4
gpt4 key购买 nike

我正在使用 java servlet 和 h2 嵌入式数据库开发学生数据库 Web 应用程序。我需要知道如何找到典型的学生数据库是否存在。因此,如果它不存在,则必须创建它,否则程序应继续使用现有程序。

最佳答案

tl;dr

IFEXISTS=TRUE 添加到您的连接 URL 字符串。

H2 创建数据库,如果不存在

你问:

I need to know how to find whether the typical student database exists or not. so that, if it is not there, it must be created or else the program should continue with the existing one.

默认情况下,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:

  1. 在文件系统的指定位置建立一个新的数据库文件(如果尚不存在)。
  2. 打开与数据库的连接。

但要回答您的问题标题,请继续阅读。

如果存在

您可以在连接尝试中指定仅当请求的数据库已存在时才应完成连接。此功能使用 IFEXISTS=TRUE语法。

String url = "jdbc:h2:/path/to/MyDatabase;IFEXISTS=TRUE";

这导致 H2:

  • 在给定位置查找现有数据库。
    • 如果没有现有的数据库,抛出异常。
    • 如果找到现有数据库,则打开一个连接。

Trap当数据库不存在时抛出的异常。

文件

您检查文件系统中是否存在数据库文件,假设您的数据库持久存储(与 in-memory database 相对)。

关于java - 如何在创建新数据库之前检查现有的 h2 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39294691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com