[英]Initializing an HSQLDB instance and then using it in an app
我对嵌入式数据库的概念是全新的,并且选择了HSQLDB作为Java应用程序的嵌入式数据库。 我认为我从根本上不了解某些内容:在任何地方都看不到如何/在哪里:
db_myapp
) 对于非嵌入式(“普通”)数据库,我将首先使用数据库客户端连接到数据库,然后CREATE
db_myapp
数据库以及它应具有的任何表。 然后,我的应用程序希望这些表在运行时存在。
但是使用HSQLDB,我没有这样的数据库服务器可以连接,因此我看不到在我的应用程序运行之前如何/在何处可以创建这些数据库/表/凭证。
也许这正是“嵌入式”数据库所做的; 也许是将整个数据库嵌入JDBC驱动程序中? 无论如何,我仍然需要一种方法来完成上面列出的三件事。
我唯一想到的是,每次我的应用程序启动时都要运行一些初始化代码。 该代码将检查这些构造是否存在,如果不存在,则将创建它们。
这里有几个问题:
Connection
本身所需的凭据。 我如何/在哪里创建这些? 简而言之,就是您步入正轨。
实际上,连接到嵌入式数据库与连接到普通数据库服务器没有什么不同,只是连接字符串有所不同。 本节包含有关此信息。 问题是,您实际上并没有单独的“数据库”可供选择,它只是在连接字符串中指定的。 对于连接:
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.