Apache Derby, 是一个完全由java实现的关系数据库。它的目标是实现一个非常小的数据库,从而你能够很容易的将它嵌入到任何基于java的解决方案中。当然Derby也提供了传统的基于C/S架构的数据库框架。但是Derby对我的最大吸引力任然是其嵌入式数据库方式。
1. 下载及安装
到http://db.apache.org/derby/derby_downloads.html,根据你的系统是windows或unix/Linux下载相应的版本,然后简单的解压到需要的安装目录即可。本文为例,将其解压到目录: D:/Program Files/Java/db-derby
2. 环境变量设置
首先要加入环境变量DERBY_INSTALL ,值为第一步的解压目录(D:/Program Files/Java/db-derby);然后需要在classpath中加入$(DERBY_INSTALL)/lib目录下的derby.jar和derbytools.jar( %DERBY_INSTALL%/lib/derby.jar;%DERBY_INSTALL%/lib/derbytools.jar )。具体方法就不详细阐述了。如果设置正确的话,在终端中运行java org.apache.derby.tools.sysinfo,会打印出类似以下的信息:
------------------ Java 信息 ------------------
Java 版本: 1.6.0_03
Java 供应商: Sun Microsystems Inc.
Java 主目录: D:/Program Files/Java/jdk/jre
Java 类路径: D:/Program Files/Java/db-derby/lib/derby.jar;D:/Program Files/Java/db-derby/lib/derbytools.jar;.
OS 名: Windows XP
OS 体系结构: x86
OS 版本: 5.1
Java 用户名: wdmy
Java 用户主目录:D:/wdmy/profile
Java 用户目录: C:/Documents and Settings/wdmy
java.specification.name: Java Platform API Specification
java.specification.version: 1.6
--------- Derby 信息 --------
JRE - JDBC: Java SE 6 - JDBC 4.0
[D:/Program Files/Java/db-derby/lib/derby.jar] 10.3.2.1 - (599110)
[D:/Program Files/Java/db-derby/lib/derbytools.jar] 10.3.2.1 - (599110)
------------------------------------------------------
----------------- 语言环境信息 -----------------
当前语言环境: [中文/中国 [zh_CN]]
找到支持的语言环境:[cs]
版本:10.3.2.1 - (599110)
找到支持的语言环境:[de_DE]
版本:10.3.2.1 - (599110)
找到支持的语言环境:[es]
版本:10.3.2.1 - (599110)
找到支持的语言环境:[fr]
..............
..............
3. 使用数据库
为了操作数据库,我们需要使用derby自带的脚本工具及:ij。
在终端中输入:java org.apache.derby.tools.ij
输出如下:
ij version 10.3
ij>
然后即可在>后面输入ij命令。
4. 连接及创建数据库
derby中,连接和创建数据库有相似的语法,唯一不同的是创建数据库会在命令后面加上create=true 属性。
例:
创建MyDbTest数据库:
ij> connect 'jdbc:derby:MyDbTest;create=true';
连接MyDbTest数据库:
ij> connect 'jdbc:derby:MyDbTest';
MyDbTest所在目录是当前目录,即你运行ij时所在的目录。当然你也可以具体指定目录:
ij> connect 'jdbc:derby:/home/bill/databases/MyDbTest';
5. 执行SQL语句
连接上数据库之后,就可以使用SQL语句进行数据库操作了,例如:
ij(CONNECTION1)> create table derbyDB(num int, addr varchar(40));
ij(CONNECTION1)> insert into derbyDB values (1956,'Webster St.');
ij(CONNECTION1)> insert into derbyDB values (1910,'Union St.');
ij(CONNECTION1)> update derbyDB set num=180, addr='Grand Ave.' where num=1956;
ij(CONNECTION1)> select * from derbyDb;
6. 其它命令
断开连接:
ij> disconnect;
退出ij:
ij> exit;
7. 在java程序中使用嵌入式derby数据库
在java程序中使用嵌入式derby数据库的模型如下:
应用程序以及数据库驱动都运行在jvm中,而数据文件保存在文件系统里。应用程序通过JDBC对数据进行操作,在使用上和一般的jdbc用法一样。需要指出的是
jdbc驱动为:
另外需要知名数据库文件所在文件系统中的位置。
示例:
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test ... {
private static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
private static String protocol = "jdbc:derby:";
String dbName = "c:/derbyDB";
static void loadDriver() ...{
try ...{
Class.forName(driver).newInstance();
System.out.println("Loaded the appropriate driver");
} catch (Exception e) ...{
e.printStackTrace();
}
}
public void doIt() ...{
Connection conn = null;
Statement s = null;
ResultSet rs = null;
System.out.println("starting...");
try ...{
conn = DriverManager.getConnection(protocol + dbName
+ ";create=true");
} catch (SQLException e) ...{
e.printStackTrace();
}
System.out.println("Connected to and created database " + dbName);
try ...{
s = conn.createStatement();
s.executeUpdate("create table derbyDB(num int, addr varchar(40))");
s.executeUpdate("insert into derbyDB values (1956,'Webster St.')");
s.executeUpdate("insert into derbyDB values (1910,'Union St.')");
s.executeUpdate("update derbyDB set num=180, addr='Grand Ave.' where num=1956");
rs = s.executeQuery("select * from derbyDb");
while (rs.next()) ...{
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
}
} catch (SQLException e1) ...{
e1.printStackTrace();
}
try ...{
conn.close();
conn = null;
s.close();
s = null;
rs.close();
rs = null;
} catch (Exception e) ...{
e.printStackTrace();
}
}
public static void main(String[] args) ...{
Test t = new Test();
t.doIt();
}
}