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

时间:2014-10-29 16:57:00

标签: java hsqldb embedded-database

我是嵌入式数据库概念的新手,并选择HSQLDB作为我的Java应用程序的嵌入式数据库。我认为我从根本上不理解某些事情:我无处可看到/在哪里:

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

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

但是对于HSQLDB,我没有这样的数据库服务器可以连接,所以在应用程序运行之前,我没有看到提前创建这些数据库/表/凭证的方式/位置。

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

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

这里有几个问题:

  • 此方法可能适用于数据库和表,但不适用于JDBC Connection本身所需的凭据。我如何/在哪里创建它们?
  • 我甚至不确定这是否是使用嵌入式HSQLDB的正确/正常方法;有人可以确认我已经走上正轨(也就是“ check-to-see-if-it-exists-and-if-not-then-create ”方法?)
  • 如果我不小心执行尝试在已存在的情况下创建新数据库/表前夕的代码,会发生什么? HSQLDB会忽略它还是会破坏我现有的DB /表?

1 个答案:

答案 0 :(得分:2)

简短的回答是,你几乎走在正确的轨道上。

连接到嵌入式数据库与连接到普通数据库服务器没什么不同,只是连接字符串有点不同。 This section有关于此的信息。问题是你并没有真正拥有独立的数据库'它可以选择,它只是在连接字符串中指定的。对于连接:

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

这将为您提供与嵌入式数据库引擎的连接,该引擎将数据保存在/opt/db/testdb的文件中。嵌入式数据库的默认用户名始终是&#39; SA&#39;没有密码。老实说,我不知道它是否有效,但如果你真的需要设置不同的密码,你可以尝试执行ALTER USER SA SET PASSWORD <newPassword>。它可能会起作用......

就创建表等而言,还有几种方法可以解决这个问题,具体取决于数据库是作为文件还是作为内存保存。通常,嵌入式dbs会用于非常简单的数据,因此通过在初始化连接后立即执行语句来创建表。 CREATE TABLE IF NOT EXISTS ...是通常的做事方式。这允许您仅在表格尚未存在的情况下创建表格。

如果您正在使用基于文件的数据库,那么hsqldb会为您提供另一个选项。查看this documentation关于使用他们的工具访问数据库的信息。这将允许您提前创建基于文件的数据库,并设置用户名/密码和设置所有表。然后,您可以复制生成的文件以供应用程序使用。然后在应用程序连接到它之前设置所有内容。

所以最终,你可以选择任何一种方式。您可以在初始化连接时将应用程序设置为一切,也可以提前手动设置。我的偏好是让应用程序在代码中设置它只是因为那时你的表定义更接近实际使用它们的代码。尽管如此,我还没有使用像这样的嵌入式数据库来获得非常复杂的数据,所以我无法坦率地说出它的扩展程度。