derby数据库详解Word格式.docx
《derby数据库详解Word格式.docx》由会员分享,可在线阅读,更多相关《derby数据库详解Word格式.docx(23页珍藏版)》请在冰点文库上搜索。
![derby数据库详解Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/dc954814-f84d-4ee1-94ee-aca8815e4bfb/dc954814-f84d-4ee1-94ee-aca8815e4bfb1.gif)
广泛而深入的特性列表
Derby的生动逼真的抚育使得它拥有一个令人惊奇的特性列表。
有许多简单的高级特性不能被其他开源Java数据库利用。
一部分的列表特性使Derby从其他的Java关系数据库管理系统中分离出来,包括:
l
100%Java实现
100%Java类型4JDBC驱动
SQL92E标准支持大部分SQL99特性
ACID完全的事务独立的事务支持
J2EE支持JNDI,连接池和XA
视图,临时表和保存
BLOB和CLOB数据类型
行和表锁定
有价值的基本查询优化
服务器端指示约束
触发器和存储过程
为服务器端函数,触发器或存储过程等操作在数据库里存储Java代码
能排除CD-ROM里的只读数据库
数据的导入和导出
快速数据库加密选项
在代码例子中,你将谈究使用指示约束,存储过程和在数据库中存储Java代码。
两种灵活的使用模式
Derby可以工作在嵌入式模式下,或在完全的客户端/服务器模式下。
插图1说明在嵌入式模式下的工作原理。
插图1:
嵌入式模式
在插图1里,你可以看到Derby引擎是嵌入在你的应用程序里的。
当工作在嵌入式模式,你的应用程序访问数据库是直接和专有的。
这就意味着其他应用程序不可能在同一时间访问该数据库。
嵌入式模式的主要优点是不需要进行网络和服务器设置。
因为你的应用程序包含了Derby引擎,使用者并不知道你使用了一个关系数据库。
当使用Derby的嵌入式模式时,并没有复杂的配置和特殊的API需要你去学习。
实际上,你仅仅需要做:
1.
确保DerbyJARs文件在你的应用程序classpath里
2.
使用嵌入式JDBC驱动
3.
写数据库访问代码到JDBC
这是正确的,Derby根本没有特殊的APIs。
只需要为你的应用程序编码到JDBC,然后Derby会为你工作得很好。
事实上,如果你已经有了JDBC代码,而想把代码转换到Derby嵌入式模式下运行是十分容易的。
如果你使用过ORACLE,DB2,SQLServer或MySQL,你应该对网络模式(客户端/服务器模式)的工作原理相当熟悉。
插图2说明了这个模型的工作原理
插图2:
客户端/服务器模式
在插图2中,一个独立的Java进程运行作为Derby的网络服务器,通过网络监听客户端的连接。
该Derby网络服务器能唯一的访问数据库存储器,并能同时接受多个客户端连接。
这就允许多个用户在同一时间通过网络方式访问该关系数据库管理系统。
当不适合使用嵌入式模式进行操作时(例如:
你必须运行和管理个别的服务器进程,或许在不同的机器上),当你需要多用户访问数据库时,Derby的客户端-服务器模式能提供一个有效的解决方案。
在插图2中,注意客户端应用程序编码到JDBC。
这些不是Derby特有的APIs。
事实上,这个类似于插图1里的运行在嵌入式下JDBC应用程序运行在客户端-服务器模式的最低配置下。
配置Derby数据库
为了完全体会Derby设置和使用的好处,你需要自己亲身体验它。
首先,下载和安装Derby。
然后,确保你的classpath环境变量包含:
derby_installation_directory\lib\derby.jar;
和derby_installation_directory\lib\derbytools.jar;
你也可以编辑提供给你的sp.bat文件,设置你的Derby安装目录,然后运行设置你的classpath。
一旦你设置好了classpath,就修改工作目录。
数据库将被创建在这个目录里面。
从db\createdb目录复制createdb.sql文件到工作目录。
然后,启动命令行界面(执行ij)进入Derby:
javaorg.apache.derby.tools.ij
你也可以使用在batch子目录下提供的ij.bat,在使用前一定要编辑该批处理文件,添加你的Derby安装目录路径。
这样才能进入正确的命令行,使用嵌入式Derby引擎。
你看到的提示将与下面的类似:
ijversion10.0
ij>
你可以输入“help”;
来查看可以使用的命令。
要创建数据库和表来使用,仅仅需要运行createdb.sql文件。
使用ij命令:
run‘createdb.sql’;
run命令将调用一个脚本文件并执行它里面的Derby命令,类似于Windows的批处理文件。
下面显示的是createdb.sql文件的内容。
connect
'
jdbc:
derby:
vsjdb;
create=true'
;
droptableorders;
droptablecusts;
createtablecusts
(idchar(5)notnull,
namechar(40)notnull,
primarykey(id));
createtableorders
(idchar(8)notnull,
custidchar(5)notnull,
totalinteger,
primarykey(id,custid));
insertintocustsvalues(
1'
'
JohnSmith'
);
2'
MaryTodd'
insertintoordersvalues(
0001'
39999);
0002'
2999);
0003'
1904);
0004'
3232);
0005'
109900);
在每一行都需要一个分号,这与命令行输入命令是一样的。
脚本的第一行是连接命令,指明连接的嵌入式Derby驱动名字。
在脚本里的连接命令为:
‘jdbc:
create=true’;
使用jdbc:
derby说明Derby驱动是使用的JDBC协议,而vsjdb是一个数据库的名字,它能通过嵌入式驱动创建和访问。
create=true属性说明如果该数据库不存在时,就创建该数据库。
该createdb.sql脚本将创建一个名为vsjdb(当它不存在时)的数据库,并在该数据库中创建custs和orders表。
它将在表中添加两个用户和五个定单。
如果你使用过其他数据库的SQL语句,你应该相当熟悉在脚本里的SQL语句。
你可以查看你的工作目录,现在你将看到一个vsjdb子目录。
数据将保存在里面。
数据库可以很简单的的进行备份,就是复制这个子目录。
表格1和表格2是custs和orders表的信息
Table1:
Thecuststable
FieldName
DataType
Note
Id
char(5)
primarykey
Name
char(40)
Table2:
Theorderstable
char(8)
primarykey(compound)
Custid
Total
int
与关系数据库管理系统数据操作
要查看顾客记录信息,在ij提示行后使用SQLSELECT语句:
select*fromcusts;
要查看定单,使用下面的命令:
select*fromorders;
要删除顾客,尝试使用下面的命令:
deletefromcustswhereid=’1’;
你可以选择custs表里的某一行,并能查看到哪个用户被删除。
要删除与这个用户相关联的定单信息,使用下面的命令:
deletefromorderswherecustid=’1’;
你现在可以查看orders表,并能看见所有关于一号顾客的定单都被删除了。
在你离开ij前,删除数据库里的所有记录:
deletefromcusts;
deletefromorders;
着它将是一个空数据库,在下一部分,将写入自定义的Java代码。
使用exit命令离开ij:
exit;
自从连接URL指定了嵌入式驱动,只有ij能唯一的访问这个数据库。
嵌入Derby到你的Java应用程序中
时间加速我们的Java编译和编写某些代码。
这些代码将放入Derby做一个小测试,给你一个关系数据库管理系统能处理现实世界大量数据能力的信心。
下面是名为FillTable.java的代码,将创建1000个用户,每个用户有10条定单--总共10000条定单。
在嵌入子目录下你可以找到FillTable.java的源代码。
importjava.sql.*;
publicclassTableFiller{
Connectionconn=null;
PreparedStatementinsertCust
=null;
PreparedStatementinsertOrder
上面的申明是标准的JDBC申明。
conn控制JDBC连接。
insertCust和insertOrder将分别处理插入记录到custs和orders表里的SQL语句。
PreparedStatement的使用使关系数据库管理系统得到优化的可能。
其次,下面的代码,driverName包含我们装载和使用的JDBC驱动器的类名。
这是一个嵌入式驱动器。
连接的URL是url值。
你可以看见是使用的绝对路径定位这个数据库(注意:
你必须要使用正斜线来分离路径)。
如果你总是在你的工作目录运行这个程序的话,你可以仅使用”jdbc:
vsjdb”。
也可以可以设置derby.system.home属性来改变Derby数据库文件的位置(例如:
java-Dderby.system.home=c:
\mydbdirorg.apche.derby.tools.ij)。
StringdriverName=
"
org.apache.derby.jdbc.EmbeddedDriver"
Stringurl=
"
c:
/derby1021/vsjdb"
loadDrivers()方法装载JDBC驱动类并创建获得一个Derby的JDBC连接。
并准备两个插入语句。
publicvoidloadDrivers()
throwsSQLException,
ClassNotFoundException{
Class.forName(driverName);
conn=DriverManager.getConnection(
url);
insertCust=conn.prepareStatement(
INSERTINTOcustsVALUES(
?
?
)"
insertOrder=
conn.prepareStatement(
INSERTINTOordersVALUES(
}
TableFiller的main()方法创建一个TableFiller的实例,并调用它的addCustomer()方法去创建1000个用户。
它也调用addOrder()方法去创建10000条定单信息。
为了显示进度,它打印顾客编号和’.’到系统输出中。
publicstaticvoidmain(Stringargs[])
throwsException{
TableFillertf=newTableFiller();
tf.loadDrivers();
intorderNum=1;
for(inti=1;
i<
1001;
i){
StringcustNum="
i;
tf.addCustomer(
custNum,"
customer#"
i);
System.out.print("
\n"
custNum);
for(intj=1;
j<
11;
j){
tf.addOrder("
orderNum,
custNum,j*99);
orderNum;
."
}
tf.closeAll();
addCustomer()方法获得参数并执行insertCust的预编译语句。
publicvoidaddCustomer(
Stringid,Stringcustname)
throwsSQLException{
insertCust.setString(1,id);
insertCust.setString(2,custname);
insertCust.executeUpdate();
addOrder()方法获得参数并执行insertOrder的预编译语句。
publicvoidaddOrder(Stringid,
Stringcustid,inttotal)
insertOrder.setString(1,id);
insertOrder.setString(2,custid);
insertOrder.setInt(3,total);
insertOrder.executeUpdate();
closeAll()整理和关闭两个预编译语句和JDBC连接,通知Derby释放被控制的资源。
publicvoidcloseAll()
insertCust.close();
insertOrder.close();
conn.close();
当顾客和定单被创建,程序将打印顾客编号到屏幕上。
编号从1到1000表明每个顾客被创建。
而打印的每个’.’则表明定单被创建。
要编译这个代码,你仅仅需要确信你已经设置了classpath,并且使用标准的Java编译命令:
javaTableFiller.java
你要确保没有ij或其他Derby会话在运行。
在嵌入式模式你需要唯一的访问数据库。
在编译成功后,需要复制TableFiller.class文件到你的工作目录下,然后从那里运行TableFiller:
javaTableFiller
你应该看见打印出来的状态和写入数据库的记录。
检验被创建的记录
现在,去看看你创建的顾客和定单信息,确保你在工作目录并再次登录到ij。
连接vsjdb数据库。
connect‘jdbc:
vsjdb’;
然后使用下面的SELECT语句查看所有1000条顾客信息。
同样的使用下面的SELECT语句查看所有10000条定单信息。
当然,使用类似于FillTable.java里的标准JDBC代码,你可以整合Derby的关系数据库的访问功能到你的任何一个工程中。
当你的项目需要一个嵌入式数据库时,有能力简单和快速处理产生大量的数据的Derby是你最好的选择。
Derby的自由Apache许可允许你绑定它到你的程序上,即使你决定把你的产品进行商业买卖。
探索Derby的高级特性
由于Derby是从IBM中分离出来的,Derby有许多高级功能--具有代表性的仅仅建立在高端的关系数据库管理系统中。
插图3展现了几个有趣的特性。
插图3:
Derby的数据