java derby详解
下载db-derby-10.10.2.0-bin
derby是Java 自带的一个关系型数据库,它完全是基于Java研发的,非常小。
本身从JDK1.6之后,每次安装jdk都会自带derby数据库,由于jdk自带的数据库版本不够新,所以也可以从网上单独下载一个。我下载的是db-derby-10.10.2.0-bin。下载之后解压大D盘。
配置环境变量
由于derby是纯Java开发的,所以必须配置环境变量。首先必须配置jdk,这个配置我就省略了,重点介绍derby的配置。
在环境变量里面:
配置DERBY_HOME
配置:PATH
配置CLASSPATH
要使用Derby,必须在CLASSPATH中包含这个工具,如下:
c:/Program Files/Java/jdk1.6.0/db/derby.jar
c:/Program Files/Java/jdk1.6.0/db/derbytools.jar
在derby.jar文件中包含由JDBC内嵌模式的驱动;在derbytools.jar中包含由ij工具。
配置完成之后,在命令行输入:ij
此时表示derby配置成功。
Derby数据库的两种运行模式
1) 内嵌式模式(embedded mode)。Derby数据库与应用程序共享同一个JVM,应用程序会在启动和关闭时分别自动启动或停止关系引擎。Derby包的derby.jar文件包含了Derby 数据库引擎和嵌入式JDBC驱动程序;
- 进入目录C:\Users\Administrator\Desktop\test\database
- 输入ij
- 输入connect 'jdbc:derby:test;'
注意:内嵌模式有且只有一个连接。
2) 网络服务器模式(network server mode)。Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用程序来访问同一个Derby数据库。Derby的derbynet.jar文件包含了
- 开启服务
- java -jarD:\db-derby-10.9.1.0-bin\lib\derbyrun.jar server start(改成你的derby目录)
- 连接数据库
- connect'jdbc:derby://localhost:1527/myDemo';
连接数据库
connect 'jdbc:derby:D:/db-derby-10.10.2.0-bin/demo/databases/toursdb;user=ylsoft;password=hwyl;create=true';
通过内嵌模式连接数据库toursdb,如果数据库不存在则创建一个并连接,如果存在,则直接连接。
创建一个up_temp表
create table up_temp(id varchar(36) not null,address varchar(100) not null,content varchar(500),version varchar(10) not null,node_id varchar(36) not null,type varchar(2) not null,local_temp varchar(200) not null,createtime timestamp not null,filename varchar(50) not null,primary key(id));
插入一条数据
INSERT INTO up_temp (id,address,content,version,node_id,type,local_temp,createtime) VALUES ('2f843624-cb6f-49f0-aab6-59c4307f5954','http://36.110.44.138:44685/downloadAction!download.action?fid=2ff67da3-74bf-43a0-9a6c-301e6b4af325','测试','1.0.0.0','2f843624-cb6f-49f0-aab6-59c4307f5954','1','http://36.110.44.138:44685/downloadAction!download.action?fid=2ff67da3-74bf-43a0-9a6c-301e6b4af325','2017-04-10 15:35:00');
此时为止,数据库里面有数据了。
下面看个例子
这个例子我数据库的位置在:D:\Program Files\Java\jdk1.7.0_79\jre\cacheup
所以我创建的是cacheup数据库
嵌入式的驱动:
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.10.2.0</version> </dependency>注意:嵌入式模式与网络服务器模式的驱动不同。
网络模式驱动:org.apache.derby.jdbc.ClientDriver
package derby;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
public class DerbyTest{
private static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
private static String protocol = "jdbc:derby:";
private static String dbName = System.getProperty("java.home") + "\\cacheup";
private static String username = "ylsoft";
private static String userpwd = "hwyl";
public static void loadDriver() {
try {
Class.forName(driver).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
System.out.println(protocol + dbName + ";user=" + username + ";password=" + userpwd + ";create=true");
loadDriver();
System.out.println(get("up_temp"));
}
public static String get(String tablename) throws Exception{
Map rowData = new HashMap();
try {
Connection conn = DriverManager.getConnection(protocol + dbName + ";user=" + username + ";password=" + userpwd + ";create=true");
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from " + tablename);
ResultSetMetaData md = resultSet.getMetaData();
int columnCount = md.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), resultSet.getObject(i));
}
}
conn.close();
statement.close();
resultSet.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return rowData.toString();
}
}
操作与jdbc操作是一样的,很简答。
网络服务器模式:
Derby数据库的网络模式应用
derby数据库不但可以通过嵌入式模式工作,与其他的数据库相同,也可以工作在网络模式下
同时为多个应用程序服务,处理来自不同JVM的数据库操作请求。
1、网络模式derby的工作原理
如果使用过其他的一些大型数据库,例如oracle、db2等,那么应该对数据库的网络
工作模式(c/s模式)的原理相当熟悉。
在这种模式下derby与其他数据库一样作为一个独立的服务器工作在网络上,等待来自其他
java应用程序的连接请求。这种模式中derby可以同时为不同的java应用程序服务,处理来自不同JVM
的数据库操作请求,也就是说同一时刻可以有多个应用程序访问同一个derby数据库。
说明:当不适合采用嵌入式进行操作时,例如应用程序与数据库不在同一台机器上,
或者数据库需要多用户并发访问时,就可以采用网络模式的的derby。
2、操作网络模式的derby
接下来介绍如何对网络模式下的derby进行操作,主要包括以网络模式启动derby
以及使用ij工具连接网络模式的derby。
①以网络模式启动derby
使用网络模式操作derby数据库前,首先要以网络模式启动derby数据库服务器,
下面给出了启动命令的基本格式:
java org.apache.derby.drda.NetworkServerControl start [-h <host> [-p <port>]]
NetworkServerControl是系统提供的一个用于启动derby服务器的类,位于derbynet.jar文件中。
因此需要将derbynet.jar文件路径添加到系统的classpath环境变量中。
方括号中为可选参数,"-h <host>"用来指定主机,"-p <port>"用来指定端口号,
默认的主机为localhost,默认的端口号为1527。
例如,下面给出了一个启动derby数据库服务器工作在本机1527端口的命令。
java org.apache.derby.drda.NetworkServerControl start -h localhost -p 1572
当成功启动derby数据库的网络服务后,可以从网路中的其他机器或本机来对该机器中的derby数据库
进行操作了。需要特别注意的是,在执行网路操作的过程中,cmd窗口不能关闭,一旦关闭则将断开网路服务。
②使用ij工具连接网络模式的derby
当derby数据库的网路服务启动后,可以使用ij工具进行连接和操作,
下面给出了ij中连接网络模式derby的名称格式。
connect 'jdbc:derby://<服务器主机地址>:<服务器端口号>/<数据库路径>[;create=True|False]';
提示:使用上述命令连接derby数据库服务器之前首先需要将derbyclient.jar文件路径添加到系统的
classpath环境变量中,
例如,下面的命令连接上了上面启动的derby数据库服务。
connect 'jdbc:derby://localhost:1572/E:/roway';
如果上述命令在ij中成功执行,则与指定数据库的连接成功建立,接着就可以使用各种命令对所连接的
数据库进行操作了。对网络derby数据库进行操作的命令与嵌入式derby完全相同。
3、开发启动derby网络服务的程序
实际应用中,不但可以通过前面介绍的命令来启动的derby数据库的网路服务,也可以通过自己开发的
java程序来启动derby数据库的网络服务。
从前面的介绍中可以发现,通过命令启动derby数据库的网络服务需要使用
org.apache.derby.drda.NetworkServerControl类。同样,自己开发程序启动derby数据库的网络服务也需要
使用这个类,有兴趣的可以自行查阅API。