通常来说 JDBC 可以访问所有的数据库。
JDBC 通常只用于连接数据库,当 JDBC 完成数据库连接后,将会使用 java.sql.Connection 对象提供的一系列方法来返回访问的数据。
访问 HyperSQL 使用的是 JDBC, 但是针对数据库特性的不同而采用不同的连接字符串。
例如:如果数据库为 file:database 类型,数据被命名为 "testdb"。同时这个数据库文件与你发布的应用程序在相同的目录下,你可以使用下面的代码来创建一个数据库连接:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "SA", "");
数据库文件的路径格式可以在 Windows 和 Linux 下 用反斜杠来指定。
因此在相同磁盘路径下相对路径和绝对路径便可以用上面的方法进行识别。
例如,如果你的数据库路径在 Linux 下为 /opt/db/testdb ,同时你在 Windows 的 C 盘下创建了相同的目录结构,你可以在 Windows 和 Linux 下使用相同的连接字符串如下:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
当使用相对路径的时候,这个路径指向为相对但却 JVM 运行时的路径。请参考 JDBCConnection 的 API 文档来获得更多的内容。
路径名与数据库文件名在数据库和连接被第一次被创建的时候按照大小写敏感的方式命名的。
但是,如果在随后使用其他连接来连接一个已经打开的数据库的时候,如果你使用了全部大写的连接字符串,那么你也会连到已经打开的这个数据库。换句话说,第二次的连接和第一次的连接是等效的。
这种考虑方式是很有必要的,因为 Windows 在路径上是大小写不敏感的。
一个 mem: 数据库,会用关键字 mem: 来进行定义的。对于 mem: 数据库而言,其路径仅仅是其名字。一些 mem: 数据库可以与其名字同时显式存在。
在下面的例子中,数据库被称为 "mymemdb":
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
res: 数据库采用 res: 关键字。这个方式的数据库为一个 Java 的资源文件,数据库的路径为 Java 路径 (与 class 的路径一样)。在下面的例子中, "resdb" 是数据库文件的在 class 目录 "org/ my/path" 下的根节点。一个 Java 资源存储的是一个压缩格式,当其在调用的时候,将会在内存中解压。
因为这个原因 res: 数据库不能存储大量数据同时永远是只读的。
Connection c = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");
在第一次进行数据库访问的时候,将会创建一个数据库,一些基本数据结构将会被初始化,一些辅助线程也会被启动。
当这些完成以后,一些 Java 应用程序将会用 JDBC 进行连接的调用。
当 SQL 命令 "SHUTDOWN" 被执行,全局数据结构和辅助线程将会被销毁。