繁体   English   中英

初始化HSQLDB实例,然后在应用程序中使用它

[英]Initializing an HSQLDB instance and then using it in an app

我对嵌入式数据库的概念是全新的,并且选择了HSQLDB作为Java应用程序的嵌入式数据库。 我认为我从根本上不了解某些内容:在任何地方都看不到如何/在哪里:

  • 定义必须用于连接数据库的用户名/密码凭证
  • 创建一个新数据库(例如db_myapp
  • 为该新数据库创建表

对于非嵌入式(“普通”)数据库,我将首先使用数据库客户端连接到数据库,然后CREATE db_myapp数据库以及它应具有的任何表。 然后,我的应用程序希望这些表在运行时存在。

但是使用HSQLDB,我没有这样的数据库服务器可以连接,因此我看不到在我的应用程序运行之前如何/在何处可以创建这些数据库/表/凭证。

也许这正是“嵌入式”数据库所做的; 也许是将整个数据库嵌入JDBC驱动程序中? 无论如何,我仍然需要一种方法来完成上面列出的三件事。

我唯一想到的是,每次我的应用程序启动时都要运行一些初始化代码。 该代码将检查这些构造是否存在,如果不存在,则将创建它们。

这里有几个问题:

  • 这种方法可能适用于数据库和表,但不适用于JDBC Connection本身所需的凭据。 我如何/在哪里创建这些?
  • 我什至不知道这是否是使用嵌入式HSQLDB的正确/正常方法。 有人可以确认我的计划是否正确(即“ 检查是否存在并创建然后再创建 ”方法)?
  • 如果我不小心执行了试图创建新数据库/表平安夜的代码,那该怎么办? HSQLDB会忽略它还是会炸毁我现有的数据库/表?

简而言之,就是您步入正轨。

实际上,连接到嵌入式数据库与连接到普通数据库服务器没有什么不同,只是连接字符串有所不同。 本节包含有关信息。 问题是,您实际上并没有单独的“数据库”可供选择,它只是在连接字符串中指定的。 对于连接:

Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");

这将为您提供到嵌入式数据库引擎的连接,该引擎将数据持久保存在/opt/db/testdb 嵌入式数据库的默认用户名始终为“ SA”,没有密码。 老实说,我不知道它是否可以工作,但是如果您确实需要设置其他密码,则可以尝试执行ALTER USER SA SET PASSWORD <newPassword> 可能会起作用...

至于创建表之类的方法,有两种解决方法,这取决于数据库是作为文件还是在存储器中保存。 通常,嵌入式数据库用于处理非常简单的数据,因此表是通过在初始化连接后立即执行一条语句来创建的。 CREATE TABLE IF NOT EXISTS ...是通常的处理方式。 这样,仅当表不存在时,才可以创建它。

如果您使用的是基于文件的数据库,则hsqldb提供了另一个选择。 查看有关使用其工具访问数据库的文档 这将允许您提前创建基于文件的数据库,并设置用户名/密码之类的内容并设置所有表。 然后,您可以复制应用程序要使用的结果文件。 然后,将在您的应用程序连接到它之前设置所有内容。

因此,最终,您可以选择两种方式。 您可以在初始化连接时让您的应用程序设置所有内容,也可以提前手动设置。 我的首选是让应用程序仅在代码中进行设置,因为这样一来,您的表定义将更接近实际使用它们的代码。 不过,我还没有将嵌入式数据库用于真正的复杂数据,所以我不能坦白地说扩展性如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM