ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 试用开源数据库ApacheDerby

试用开源数据库ApacheDerby

原创 Linux操作系统 作者:redhouser 时间:2012-06-08 13:36:00 0 删除 编辑

0,版本
http://db.apache.org/derby下载http://db.apache.org/derby,要求JRE版本不低于1.5.

1,设置环境
假设:
DERBY安装路径:D:\dev\db-derby-10.8.2.2-bin

用户环境变量设置如下:
myenv.bat:
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_04
set PATH=%JAVA_HOME%\bin;%PATH%
set DERBY_INSTALL=D:\dev\db-derby-10.8.2.2-bin
set CLASSPATH=%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar;%DERBY_INSTALL%\lib\derbynet.jar;%DERBY_INSTALL%\lib\derbyclient.jar;.

2,验证Derby
java org.apache.derby.tools.sysinfo
------------------ Java 信息 ------------------
Java 版本:        1.6.0_04
Java 供应商:      Sun Microsystems Inc.
Java 主目录:      C:\Program Files\Java\jdk1.6.0_04\jre
Java 类路径:      D:\dev\db-derby-10.8.2.2-bin\lib\derby.jar;D:\dev\db-derby-10
.8.2.2-bin\lib\derbytools.jar;.
OS 名:            Windows XP
OS 体系结构:      x86
OS 版本:          5.1
Java 用户名:      mahong
Java 用户主目录:C:\Documents and Settings\mahong
Java 用户目录:    D:\dev\db-derby-10.8.2.2-bin
java.specification.name: Java Platform. API Specification
java.specification.version: 1.6
java.runtime.version: 1.6.0_04-b12
--------- Derby 信息 --------
JRE - JDBC: Java SE 6 - JDBC 4.0
[D:\dev\db-derby-10.8.2.2-bin\lib\derby.jar] 10.8.2.2 - (1181258)
[D:\dev\db-derby-10.8.2.2-bin\lib\derbytools.jar] 10.8.2.2 - (1181258)
------------------------------------------------------
----------------- 语言环境信息 -----------------
当前语言环境:  [中文/中国 [zh_CN]]
找到支持的语言环境:[cs]
         版本:10.8.2.2 - (1181258)


3,访问嵌入式数据库
窗口1:
启动数据库实例。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

窗口2:
D:\dev\java org.apache.derby.tools.ij
ij 版本 10.8
ij>connect 'jdbc:derby:MyDbTest;create=true';
lj>exit;

在当前路径下生成MyDbTest目录,并产生Derby.log日志文件.
这种方式下,数据库实例与应用程序在同一个JVM内.

4,访问服务器数据库
--窗口1:
--启动网络服务器
D:\dev\derby-db>java -jar %DERBY_INSTALL%\lib\derbyrun.jar server start
Wed Jun 06 19:34:35 CST 2012 : 已使用基本服务器安全策略安装了安全管理程序。
Wed Jun 06 19:34:35 CST 2012 : Apache Derby 网络服务器 - 10.8.2.2 - (1181258)
已启动并准备接受端口 1527 上的连接

--窗口2:
--以客户端方式连接:
D:\dev\java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest;create=true';
==>创建了数据库MyDbTest,在启动server的目录下.

ij> create table dept(deptno int not null,name varchar(30));
已插入/更新/删除 0 行
ij> alter table dept add constraint pk_dept primary key(deptno);
已插入/更新/删除 0 行

ij> create table emp(empno int,name varchar(40),addr varchar(40),deptno int);
已插入/更新/删除 0 行
ij> alter table emp add constraint fk_emp_r_dept foreign key(deptno) references
dept(deptno);
已插入/更新/删除 0 行

ij> insert into emp values(1,'name1','addr1',1);
错误 23503:表“EMP”上的 INSERT 导致违反键 (1) 的外键约束“FK_EMP_R_DEPT”。语
句已回滚。
==>外键约束

ij> insert into dept values(1,'deptname1');
已插入/更新/删除 1 行
ij> insert into emp values(1,'name1','addr1',1);
已插入/更新/删除 1 行
ij> commit;
ij> insert into emp values(2,'name2','addr2',1);
已插入/更新/删除 1 行
ij> rollback;

ij>exit;

--关闭服务器:
D:\dev\java -jar %DERBY_INSTALL%\lib\derbyrun.jar server shutdown

--窗口1:
--重新启动服务器
D:\dev\derby_db>java -jar %DERBY_INSTALL%\lib\derbyrun.jar server start
Wed Jun 06 20:20:32 CST 2012 : 已使用基本服务器安全策略安装了安全管理程序。
Wed Jun 06 20:20:32 CST 2012 : Apache Derby 网络服务器 - 10.8.2.2 - (1181258)
已启动并准备接受端口 1527 上的连接

--窗口2:
--启动客户端查询结果
D:\dev>java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';
ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1

已选择 2 行

==>通过测试表明:服务器启动时,并没有检查并打开数据库;只有在客户端访问时,在启动服务器的目录下创建或查找指定数据库;
启动一个服务器,可以同时支持客户端对多个数据库的访问.


5,测试java程序
窗口1:
启动数据库实例。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

窗口2:
D:\dev\db-derby-10.8.2.2-bin\demo\programs\simple>javac SimpleApp.java
注意:SimpleApp.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。

D:\dev\db-derby-10.8.2.2-bin\demo\programs\simple>java SimpleApp derbyclient
SimpleApp starting in derbyclient mode
Loaded the appropriate driver
Connected to and created database derbyDB
Created table location
Inserted 1956 Webster
Inserted 1910 Union
Updated 1956 Webster to 180 Grand
Updated 180 Grand to 300 Lakeshore
Verified the rows
Dropped table location
Committed the transaction
SimpleApp finished

关于如何与其他产品配合,分别参考:
Eclipse:
http://db.apache.org/derby/integrate/plugin_howto.html
iBatis:
http://db.apache.org/derby/papers/fortune_tut.html
Tomcat:
http://db.apache.org/derby/integrate/JPetStoreGeronimo.html

6,导入/导出
在当前目录准备myfile.txt:
3,name3,addr3,1
4,name4,addr4,1
5,name5,addr5,1
6,name6,addr6,1

窗口1:
启动数据库实例。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

窗口2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
    null,'EMP','myfile.txt',',',null,null,0);


ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1

已选择 2 行

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
    null,'EMP','myfile.txt',',',null,null,0);
> 错误 XIE0R:文件 myfile.txt 中的第 4 行发生导入错误:在行 4 上的意外位置中读取
到 endOfFile。
错误 XIE0E:在行 4 上的意外位置中读取到 endOfFile。
==>最后以行需要换行

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
>     null,'EMP','myfile.txt',',',null,null,0);
已执行语句。
ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1
3          |name3                                   |addr3
             |1
4          |name4                                   |addr4
             |1
5          |name5                                   |addr5
             |1
6          |name6                                   |addr6
             |1

已选择 6 行
ij>CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE(
    null,'EMP','myfile.out',null,null,null);

==>在当前路径下生成文件myfile.out
1,"name1","addr1",1
2,"name2","addr2",1
3,"name3","addr3",1
4,"name4","addr4",1
5,"name5","addr5",1
6,"name6","addr6",1

--根据文档说明,还支持LOB字段的导入/导出。


7 备份恢复
7.1备份
窗口1:
启动数据库实例。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

窗口2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';

ij> CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('d:/dev/backup/2012-06-07');
==>会自动创建目录2012-06-07,将数据备份到该目录下。

ij> exit;
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl shutdown
Thu Jun 07 08:13:25 CST 2012 : Apache Derby 网络服务器 - 10.8.2.2 - (1181258)
关闭

D:\dev\derby_db>rmdir /S Mydbtest
Mydbtest, 是否确认(Y/N)? y

D:\dev\derby_db>dir
 驱动器 D 中的卷是 work
 卷的序列号是 2044-0107

 D:\dev\derby_db 的目录

2012-06-07  08:14   

          .
2012-06-07  08:14              ..
2012-06-07  08:13             1,047 derby.log
2012-06-07  08:05               126 myfile.out
2012-06-07  08:02                68 myfile.txt
               3 个文件          1,241 字节
               2 个目录  8,345,808,896 可用字节

7.2恢复
窗口1:
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

窗口2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';
错误 08004:由于找不到数据库 MyDbTest,已拒绝连接。

ij> connect 'jdbc:derby://localhost:1527/MyDbTest;restoreFrom=d:/dev/backup/2012
-06-07';
错误 XJ040:DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: 无法使用类
加载器 sun.misc.Launcher$AppClassLoader@19821f 启动数据库 'MyDbTest',请参阅下一
个异常,以了解详细信息。::SQLSTATE: XBM0Q未找到文件 d:\dev\backup\2012-06-07\ser
vice.properties。请确保备份副本正确而且未损坏。

ij> connect 'jdbc:derby://localhost:1527/MyDbTest;restoreFrom=d:/dev/backup/2012
-06-07/MyDbTest';
ij> select count(*) from emp;
1
-----------
6

已选择 1 行

 

8 复制
Derby支持的复制有如下特点:
*基于事务日志
*只有主库处理事务,备库不支持事务,也不支持只读打开
*异步,主库提交事务与日志传送/应用无关(可能导致切换时丢失部分数据)
*一个实例可以同时充当多个角色(数据库D1的主库角色,数据库D2的从库角色,非复制数据库D3)


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18922393/viewspace-732277/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    787185