java 6 中自带的javaDB(derby)数据库,是否不用启动服务,直接可以和jdk进行交互呀?

java 6 中自带的javaDB(derby)数据库,是否不用启动服务,直接可以和jdk进行交互呀?,第1张

新安装了 JDK 6 的程序员们也许会发现,除了传统的 bin、jre 等目录,JDK 6 新增了一个名为 db 的目录。这便是 Java 6 的新成员:Java DB。这是一个纯 Java 实现、开源的数据管理系统(DBMS),源于 Apache 软件基金会(ASF)名下的项目 Derby。它只有 2MB 大小,对比动辄上 G 的数据库来说可谓袖珍。但这并不妨碍 Derby 功能齐备,支持几乎大部分的数据库应用所需要的特性。更难能可贵的是,依托于 ASF 强大的社区力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界优秀程序员们的支持。这也难怪 Sun 公司会选择其 1022 版本纳入到 JDK 6 中,作为内嵌的数据库。这就好像为 JDK 注入了一股全新的活力:Java 程序员不再需要耗费大量精力安装和配置数据库,就能进行安全、易用、标准、并且免费的数据库编程。在这一章中,我们将初窥 Java DB 的世界,来探究如何使用它编写出功能丰富的程序。
Hello, Java DB:内嵌模式的 Derby
既然有了内嵌(embedded)的数据库,就让我们从一个简单的范例开始,试着使用它吧。这个程序做了大多数数据库应用都可能会做的 *** 作:在 DBMS 中创建了一个名为 helloDB 的数据库;创建了一张数据表,取名为 hellotable;向表内插入了两条数据;然后,查询数据并将结果打印在控制台上;最后,删除表和数据库,释放资源。
public class HelloJavaDB {
public static void main(String[] args) {
try { // load the driver
ClassforName("orgapachederbyjdbcEmbeddedDriver")newInstance();
Systemoutprintln("Load the embedded driver");
Connection conn = null;
Properties props = new Properties();
propsput("user", "user1"); propsput("password", "user1");
//create and connect the database named helloDB
conn=DriverManagergetConnection("jdbc:derby:helloDB;create=true", props);
Systemoutprintln("create and connect to helloDB");
connsetAutoCommit(false);
// create a table and insert two records
Statement s = conncreateStatement();
sexecute("create table hellotable(name varchar(40), score int)");
Systemoutprintln("Created table hellotable");
sexecute("insert into hellotable values('Ruth Cao', 86)");
sexecute("insert into hellotable values ('Flora Shi', 92)");
// list the two records
ResultSet rs = sexecuteQuery(
"SELECT name, score FROM hellotable ORDER BY score");
Systemoutprintln("namettscore");
while(rsnext()) {
StringBuilder builder = new StringBuilder(rsgetString(1));
builderappend("t");
builderappend(rsgetInt(2));
Systemoutprintln(buildertoString());
}
// delete the table
sexecute("drop table hellotable");
Systemoutprintln("Dropped table hellotable");
rsclose();
sclose();
Systemoutprintln("Closed result set and statement");
conncommit();
connclose();
Systemoutprintln("Committed transaction and closed connection");
try { // perform a clean shutdown
DriverManagergetConnection("jdbc:derby:;shutdown=true");
} catch (SQLException se) {
Systemoutprintln("Database shut down normally");
}
} catch (Throwable e) {
// handle the exception
}
Systemoutprintln("SimpleApp finished");
}
}
随后,我们在命令行(本例为 Windows 平台,当然,其它系统下稍作改动即可)下键入以下命令:
清单 2 运行 HelloJavaDB 命令
java –cp ;%JAVA_HOME%dblibderbyjar HelloJavaDB
图 1 HelloJavaDB 程序的执行结果
上述的程序和以往没什么区别。不同的是我们不需要再为 DBMS 的配置而劳神,因为 Derby 已经自动地在当前目录下新建了一个名为 helloDB 的目录,来物理地存储数据和日志。需要做的只是注意命名问题:在内嵌模式下驱动的名字应为 orgapachederbyjdbcEmbeddedDriver;创建一个新数据库时需要在协议后加入 create=true。另外,关闭所有数据库以及 Derby 的引擎可以使用以下代码:
清单 3 关闭所有数据库及 Derby 引擎
DriverManagergetConnection("jdbc:derby:;shutdown=true");
如果只想关闭一个数据库,那么则可以调用:
清单 4 关闭一个数据库
DriverManagergetConnection("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 Relational Database Architecture)协议连接到服务器端。这是一个由 The Open Group 倡导的数据库交互标准。图 3 说明了该模式的大体结构。
由于 Derby 的开发者们努力使得网络服务器模式与内嵌模式之间的差异变小,使得我们只需简单地修改 清单 1 中的程序就可以实现。如清单 5所示,我们在 HelloJavaDB 中增添了一个新的函数和一些字符串变量。不难看出,新的代码只是将一些在上一节中特别指出的字符串进行了更改:驱动类为 orgapachederbyjdbcClientDriver,而连接数据库的协议则变成了 jdbc:derby://localhost:1527/。这是一个类似 URL 的字符串,而事实上,Derby 网络的客户端的连接格式为:jdbc:derby://server[:port] /databaseName[;attributeKey=value]。在这个例子中,我们使用了最简单的本地机器作为服务器,而端口则是 Derby 默认的 1527 端口。
图 3 Derby 网络服务器模式架构
清单 5 网络服务器模式下的 HelloJavaDB
public class HelloJavaDB {
public static String driver = "orgapachederbyjdbcEmbeddedDriver";
public static String protocol = "jdbc:derby:";
public static void main(String[] args) {
// same as before
}
private static void parseArguments(String[] args) {
if (argslength == 0 || argslength > 1) {
return;
}
if (args[0]equalsIgnoreCase("derbyclient")) {
framework = "derbyclient";
driver = "orgapachederbyjdbcClientDriver";
protocol = "jdbc:derby://localhost:1527/";
}
}
}
当然,仅仅有客户端是不够的,我们还需要启动网络服务器。Derby 中控制网络服务器的类是 orgapachederbydrdaNetworkServerControl,因此键入以下命令即可。如果想了解 NetworkServerControl 更多的选项,只要把 start 参数去掉就可以看到帮助信息了。关于网络服务器端的实现,都被 Derby 包含在 derbynetjar 里。
清单 6 启动网络服务器
java -cp ;"C:Program FilesJavajdk160dblibderbyjar";
"C:Program FilesJavajdk160dblibderbynetjar"
orgapachederbydrdaNetworkServerControl start
相对应的,网络客户端的实现被包含在 derbyclientjar 中。所以,只需要在 classpath 中加入该 jar 文件,修改后的客户端就可以顺利地读取数据了。再一次尝试着使用两个命令行窗口去连接数据库,就能够得到正确的结果了。如果不再需要服务器,那么使用 NetworkServerControl 的 shutdown 参数就能够关闭服务器。
更多
至此,文章介绍了 Java SE 6 中的新成员:Java DB(Derby),也介绍了如何在内嵌模式以及网络服务器模式下使用 Java DB。当然这只是浅尝辄止,更多高级的选项还需要在 Sun 和 Derby 的文档中寻找。在这一章的最后,我们将简单介绍几个 Java DB 的小工具来加快开发速度。它们都位于 orgapachederbytools 包内,在开发过程中需要获取信息或者测试可以用到。
• ij:一个用来运行 SQL 脚本的工具;
• dblook:为 Derby 数据库作模式提取(Schema extraction),生成 DDL 的工具;
• sysinfo:显示系统以及 Derby 信息的工具类;

1、运行在局域网中的一台或多台计算机和数据库管理系统软件共同构成了数据库服务器;

2、数据库服务器建立在数据库系统基础上,具有数据库系统的特性,数据库服务器为客户应用提供服务;

3、这些服务是查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。

数据库和Linux之间的关系非常密切。Linux是一种自由、开源的 *** 作系统,广泛应用于服务器领域,而数据库则是服务器中最重要的组成部分之一。以下是数据库和Linux之间的一些关系:
1 大多数商业级数据库都支持在Linux上运行。如MySQL、PostgreSQL、Oracle等等。
2 Linux系统提供了高度可靠性和稳定性,这使得它成为企业级数据库服务器的首选。
3 Linux系统具有强大的系统资源管理工具,如进程管理、内存管理、IO管理等等,这些工具可以帮助您更好地管理和优化数据库服务器。
4 Linux系统中通常使用的网络协议(如TCP/IP)和文件系统(如EXT4)也适合用于数据库服务器。
5 所有主要的数据库技术都有在Linux上实现的版本。这使得Linux成为一个非常强大的数据库环境。
总之,Linux生成优秀的数据库服务器,同时也能支持所有主流数据库技术。如果您正在考虑搭建一个数据库服务器,那么Linux是一个值得考虑的选择。

过程:电脑将数据封装上一定的头部,转换成0,1等二进制信号在线路上传播给路由器,路由器根据路由表转发数据,直达目的主机,再拆去头部信息,将纯的数据交给应用程序。

c/s(客户机/服务器)有三个主要部件:数据库服务器、客户应用程序和网络。服务器负责有效地管理系统的资源,其任务集中于:

1数据库安全性的要求

2数据库访问并发性的控制

3数据库前端的客户应用程序的全局数据完整性规则

4数据库的备份与恢复

客户端应用程序的的主要任务是:

1提供用户与数据库交互的界面

2向数据库服务器提交用户请求并接收来自数据库服务器的信息

3利用客户应用程序对存在于客户端的数据执行应用逻辑要求

4网络通信软件的主要作用是,完成数据库服务器和客户应用程序之间的数据传输。

三层C/S结构是将应用功能分成表示层、功能层和数据层三部分。

解决方案是:对这三层进行明确分割,并在逻辑上使其独立。

在三层C/S中,表示层是应用的用户接口部分,它担负着用户与应用间的对话功能。它用于检查用户从键盘等输入的数据,显示应用输出的数据。为使用户能直观地进行 *** 作,一般要使用图形用户接口(GUI), *** 作简单、易学易用。在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他两层。检查的内容也只限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。

功能层相当于应用的本体,它是将具体的业务处理逻辑地编入程序中。表示层和功能层之间的数据交往要尽可能简洁。

数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统(RDBMS)。因此一般从功能层传送到数据层的要求大都使用SQL语言。

在三层或N层C/S结构中,中间件(Middleware)是最重要的部件。所谓中间件是一个用API定义的软件层,是具有强大通信能力和良好可扩展性的分布式软件管理框架。它的功能是在客户机和服务器或者服务器和服务器之间传送数据,实现客户机群和服务器群之间的通信。其工作流程是:在客户机里的应用程序需要驻留网络上某个服务器的数据或服务时,搜索此数据的C/S应用程序需访问中间件系统。该系统将查找数据源或服务,并在发送应用程序请求后重新打包响应,将其传送回应用程序。随着网络计算模式的发展,中间件日益成为软件领域的新的热点。中间件在整个分布式系统中起数据总线的作用,各种异构系统通过中间件有机地结合成一个整体。每个C/S环境,从最小的LAN环境到超级网络环境,都使用某种形式的中间件。无论客户机何时给服务器发送请求,也无论它何时应用存取数据库文件,都有某种形式的中间件传递C/S链路,用以消除通信协议、数据库查询语言、应用逻辑与 *** 作系统之间潜在的不兼容问题。

三层C/S结构的优势主要表现在以下几个方面:

1利用单一的访问点,可以在任何地方访问站点的数据库;

2对于各种信息源,不论是文本还是图形都采用相同的界面;

3所有的信息,不论其基于的平台,都可以用相同的界面访问;

4可跨平台 *** 作;

5减少整个系统的成本;

6维护升级十分方便;

7具有良好的开放性;

8系统的可扩充性良好;

9进行严密的安全管理;

10系统管理简单,可支持异种数据库,有很高的可用性。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13126909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-05
下一篇 2023-06-05

发表评论

登录后才能评论

评论列表(0条)

保存