Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化HSQLDB实例,然后在应用程序中使用它_Java_Hsqldb_Embedded Database - Fatal编程技术网

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

Java 初始化HSQLDB实例,然后在应用程序中使用它,java,hsqldb,embedded-database,Java,Hsqldb,Embedded Database,我对嵌入式数据库的概念是全新的,我选择了成为我的Java应用程序的嵌入式数据库。我想我根本就不了解一些事情:我看不到如何/在哪里: 定义连接到数据库时必须使用的用户名/密码凭据 创建新数据库(例如,db_myapp) 为新数据库创建表 对于非嵌入式(“正常”)DB,我会首先使用DB客户端连接到数据库,然后创建DB\u myappDB以及它应该拥有的任何表。我的应用程序会期望这些表在运行时存在 但是对于HSQLDB,我没有这样的DB服务器可以连接,所以在我的应用程序运行之前,我不知道如何/在哪

我对嵌入式数据库的概念是全新的,我选择了成为我的Java应用程序的嵌入式数据库。我想我根本就不了解一些事情:我看不到如何/在哪里:

  • 定义连接到数据库时必须使用的用户名/密码凭据
  • 创建新数据库(例如,
    db_myapp
  • 为新数据库创建表
对于非嵌入式(“正常”)DB,我会首先使用DB客户端连接到数据库,然后创建
DB\u myapp
DB以及它应该拥有的任何表。我的应用程序会期望这些表在运行时存在

但是对于HSQLDB,我没有这样的DB服务器可以连接,所以在我的应用程序运行之前,我不知道如何/在哪里提前创建这些数据库/表/凭据

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

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

这里有几个问题:

  • 这种方法可能适用于数据库和表,但不适用于JDBC
    连接本身所需的凭据。如何/在何处创建这些
  • 我甚至不确定这是否是使用嵌入式HSQLDB的正确/正常方法;有人能确认我在正轨上吗(即“检查它是否存在,如果不存在,然后创建”方法)
  • 如果我意外地执行了一段代码,试图创建一个新的数据库/表eve,而该数据库/表已经存在,会发生什么情况?HSQLDB会忽略它还是会破坏我现有的数据库/表

简单的回答是,你的思路基本正确

连接到嵌入式数据库与连接到普通db服务器没有什么不同,只是连接字符串有点不同。他有这方面的消息。问题是,您实际上没有单独的“数据库”可供选择,它只是在连接字符串中指定的。对于连接:

Connection c=DriverManager.getConnection(“jdbc:hsqldb:file:/opt/db/testdb”、“SA”和“)

这将为您提供一个到嵌入式数据库引擎的连接,该引擎将数据保存在
/opt/db/testdb
文件中。嵌入式数据库的默认用户名始终为“SA”,不带密码。老实说,我不知道它是否有效,但如果您确实需要设置其他密码,您可以尝试执行
ALTER USER SA set password
。它可能会起作用

至于创建表等等,有两种方法可以实现这一点,这取决于数据库是作为文件还是内存持久化。通常情况下,嵌入式数据库用于非常简单的数据,因此表是在初始化连接后立即执行语句创建的<代码>如果不存在,则创建表…
是通常的做法。这允许您仅在表不存在时创建表

如果您使用的是基于文件的数据库,那么hsqldb将为您提供另一个选项。看看如何使用他们的工具访问数据库。这将允许您提前创建一个基于文件的数据库,并设置用户名/密码和设置所有表。然后,您可以复制应用程序使用的结果文件。然后,在应用程序连接到它之前,一切都将被设置好

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