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驱动程序;

  1. 进入目录C:\Users\Administrator\Desktop\test\database  
  2. 输入ij  
  3. 输入connect 'jdbc:derby:test;'  

注意:内嵌模式有且只有一个连接。

2) 网络服务器模式(network server mode)。Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用程序来访问同一个Derby数据库。Derby的derbynet.jar文件包含了

  1. 开启服务  
  2.   
  3. java -jarD:\db-derby-10.9.1.0-bin\lib\derbyrun.jar server start(改成你的derby目录)  
  4.   
  5. 连接数据库  
  6.   
  7. 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。

 

猜你喜欢

转载自747017186.iteye.com/blog/2370679