org.apache.derby.jdbc.EmbeddedDriver
; 创 建 一 个 新 数 据 库 时 需 要 在 协 议 后 加 入
create=true
。 另外, 关闭所有数据库以及 Derby 的引擎可以使用以下代码:
清单 3.
关闭所有数据库及 Derby 引擎
DriverManager.getConnection("jdbc:derby:;shutdown=true");
如果只想关闭一个数据库,那么则可以调用:
清
单
4.
关
闭
一
个
数
据
库
DriverManager.getConnection("jdbc:derby:helloDB;shutdown=true ");
这样,使用嵌入模式的 Derby
维护和管理数据库的成本接近于 0。这对于希望
专心写代码的人来说不失为一个好消息。 然而有人不禁要问: 既然有了内嵌模式,
为什么大多数的 DBMS
都没有采取这样的模式呢?不妨做一个小实验。 当我们同 时
在两个命令行窗口下运行 HelloJavaDB
程序。结果一个的结果与刚才一致, 而另一
个却出现了错误,如 图 2 所示。
图 2. 内嵌模式的局限
错误的原因其实很简单:在使用内嵌模式时, Derby 本身并不会在一个独立的
进 程中,而是和应用程序一起在同一个 Java 虚拟机(JVM)里运行。因此,Derby
如同应用所使用的其它 jar
文件一样变成了应用的一部分。这就不难理解为什 么在
classpath
中加入 derby
的 jar
文件,我们的示例程序就能够顺利运行 了。这也
说明了只有一个 JVM
能够启动数据库:而两个跑在不同 JVM
实例里的 应用自然就不
能够访问同一个数据库了。
鉴于上述的局限性,和来自不同 JVM 的多个连接想访问一个数据库的需求,下
一节将介绍 Derby 的另一种模式:网络服务器(Network Server
)。 网络服务器模
式 如上所述,网络服务器模式是一种更为传统的客户端/
服务器模式。我们需要启 动
一个 Derby
的网络服务器用于处理客户端的请求,不论这些请求是来自同一 个 JVM
实例,还是来自于网络上的另一台机器。同时,客户端使用 DRDA (Distributed R
elational Database Architecture
)协议连接到服务器端。这 是一个由 The Open
Group
倡导的数据库交互标准。图 3
说明了该模式的大体 结构。 由于 Derby 的开
发者们努力使得网络服务器模式与内嵌模式之间的差异变小, 使得我们只需简单地修