`
dalezhu
  • 浏览: 207108 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java DBJava 6 里的数据库

    博客分类:
  • Java
阅读更多
新安装了 JDK 6 的程序员们也许会发现,除了传统的 bin、jre 等目录,JDK 6 新增了一个名为 db 的目录。这便是 Java 6 的新成员:Java DB。这是一个纯 Java 实现、开源的数据库管理系统(DBMS),源于 Apache 软件基金会(ASF)名下的项目 Derby。它只有 2MB 大小,对比动辄上 G 的数据库来说可谓袖珍。但这并不妨碍 Derby 功能齐备,支持几乎大部分的数据库应用所需要的特性。更难能可贵的是,依托于 ASF 强大的社区力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界优秀程序员们的支持。这也难怪 Sun 公司会选择其 10.2.2 版本纳入到 JDK 6 中,作为内嵌的数据库。这就好像为 JDK 注入了一股全新的活力:Java 程序员不再需要耗费大量精力安装和配置数据库,就能进行安全、易用、标准、并且免费的数据库编程。在这一章中,我们将初窥 Java DB 的世界,来探究如何使用它编写出功能丰富的程序。
Hello, Java DB:内嵌模式的 Derby
既然有了内嵌(embedded)的数据库,就让我们从一个简单的范例开始,试着使用它吧。这个程序做了大多数数据库应用都可能会做的操作:在 DBMS 中创建了一个名为 helloDB 的数据库;创建了一张数据表,取名为 hellotable;向表内插入了两条数据;然后,查询数据并将结果打印在控制台上;最后,删除表和数据库,释放资源。
public class HelloJavaDB {
    public static void main(String[] args) {
        try { // load the driver
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
            System.out.println("Load the embedded driver");
            Connection conn = null;
            Properties props = new Properties();
            props.put("user", "user1");  props.put("password", "user1");
           //create and connect the database named helloDB
            conn=DriverManager.getConnection("jdbc:derby:helloDB;create=true", props);
            System.out.println("create and connect to helloDB");
            conn.setAutoCommit(false);

            // create a table and insert two records
            Statement s = conn.createStatement();
            s.execute("create table hellotable(name varchar(40), score int)");
            System.out.println("Created table hellotable");
            s.execute("insert into hellotable values('Ruth Cao', 86)");
            s.execute("insert into hellotable values ('Flora Shi', 92)");
            // list the two records
            ResultSet rs = s.executeQuery(
                "SELECT name, score FROM hellotable ORDER BY score");
            System.out.println("namettscore");
            while(rs.next()) {
                StringBuilder builder = new StringBuilder(rs.getString(1));
                builder.append("t");
                builder.append(rs.getInt(2));
                System.out.println(builder.toString());
            }
            // delete the table
            s.execute("drop table hellotable");
            System.out.println("Dropped table hellotable");
          
            rs.close();
            s.close();
            System.out.println("Closed result set and statement");
            conn.commit();
            conn.close();
            System.out.println("Committed transaction and closed connection");
          
            try { // perform a clean shutdown
                DriverManager.getConnection("jdbc:derby:;shutdown=true");
            } catch (SQLException se) {
                System.out.println("Database shut down normally");
            }
        } catch (Throwable e) {
            // handle the exception
        }
        System.out.println("SimpleApp finished");
    }
}
随后,我们在命令行(本例为 Windows 平台,当然,其它系统下稍作改动即可)下键入以下命令:

清单 2. 运行 HelloJavaDB 命令
java –cp .;%JAVA_HOME%dblibderby.jar HelloJavaDB
图 1. HelloJavaDB 程序的执行结果

上述的程序和以往没什么区别。不同的是我们不需要再为 DBMS 的配置而劳神,因为 Derby 已经自动地在当前目录下新建了一个名为 helloDB 的目录,来物理地存储数据和日志。需要做的只是注意命名问题:在内嵌模式下驱动的名字应为 org.apache.derby.jdbc.EmbeddedDriver;创建一个新数据库时需要在协议后加入 create=true。另外,关闭所有数据库以及 Derby 的引擎可以使用以下代码:

清单 3. 关闭所有数据库及 Derby 引擎
DriverManager.getConnection("jdbc:derby:;shutdown=true");
如果只想关闭一个数据库,那么则可以调用:

清单 4. 关闭一个数据库
DriverManager.getConnection("jdbc:derby:helloDB;shutdown=true ");
这样,使用嵌入模式的 Derby 维护和管理数据库的成本接近于 0。这对于希望专心写代码的人来说不失为一个好消息。然而有人不禁要问:既然有了内嵌模式,为什么大多数的 DBMS 都没有采取这样的模式呢?不妨做一个小实验。当我们同时在两个命令行窗口下运行 HelloJavaDB 程序。结果一个的结果与刚才一致,而另一个却出现了错误,如 图 2 所示。

图 2. 内嵌模式的局限

错误的原因其实很简单:在使用内嵌模式时,Derby 本身并不会在一个独立的进程中,而是和应用程序一起在同一个 Java 虚拟机(JVM)里运行。因此,Derby 如同应用所使用的其它 jar 文件一样变成了应用的一部分。这就不难理解为什么在 classpath 中加入 derby 的 jar 文件,我们的示例程序就能够顺利运行了。这也说明了只有一个 JVM 能够启动数据库:而两个跑在不同 JVM 实例里的应用自然就不能够访问同一个数据库了。
鉴于上述的局限性,和来自不同 JVM 的多个连接想访问一个数据库的需求,下一节将介绍 Derby 的另一种模式:网络服务器(Network Server)。
网络服务器模式
如上所述,网络服务器模式是一种更为传统的客户端/服务器模式。我们需要启动一个 Derby 的网络服务器用于处理客户端的请求,不论这些请求是来自同一个 JVM 实例,还是来自于网络上的另一台机器。同时,客户端使用 DRDA(Distributed Relational Database Architecture)协议连接到服务器端。这是一个由 The Open Group 倡导的数据库交互标准。图 3 说明了该模式的大体结构。
由于 Derby 的开发者们努力使得网络服务器模式与内嵌模式之间的差异变小,使得我们只需简单地修改 清单 1 中的程序就可以实现。如 清单 5所示,我们在 HelloJavaDB 中增添了一个新的函数和一些字符串变量。不难看出,新的代码只是将一些在 上一节中特别指出的字符串进行了更改:驱动类为 org.apache.derby.jdbc.ClientDriver,而连接数据库的协议则变成了 jdbc:derby://localhost:1527/。这是一个类似 URL 的字符串,而事实上,Derby 网络的客户端的连接格式为:jdbc:derby://server[:port]/databaseName[;attributeKey=value]。在这个例子中,我们使用了最简单的本地机器作为服务器,而端口则是 Derby 默认的 1527 端口。

图 3. Derby 网络服务器模式架构

清单 5. 网络服务器模式下的 HelloJavaDB
public class HelloJavaDB {
    public static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    public static String protocol = "jdbc:derby:";

    public static void main(String[] args) {
        // same as before
    }
    private static void parseArguments(String[] args) {
        if (args.length == 0 || args.length > 1) {
            return;
        }
        if (args[0].equalsIgnoreCase("derbyclient")) {
            framework = "derbyclient";
            driver = "org.apache.derby.jdbc.ClientDriver";
            protocol = "jdbc:derby://localhost:1527/";
        }
    }
}
当然,仅仅有客户端是不够的,我们还需要启动网络服务器。Derby 中控制网络服务器的类是 org.apache.derby.drda.NetworkServerControl,因此键入以下命令即可。如果想了解 NetworkServerControl 更多的选项,只要把 start 参数去掉就可以看到帮助信息了。关于网络服务器端的实现,都被 Derby 包含在 derbynet.jar 里。

清单 6. 启动网络服务器
java -cp .;"C:Program FilesJavajdk1.6.0dblibderby.jar";
"C:Program FilesJavajdk1.6.0dblibderbynet.jar"
org.apache.derby.drda.NetworkServerControl start
相对应的,网络客户端的实现被包含在 derbyclient.jar 中。所以,只需要在 classpath 中加入该 jar 文件,修改后的客户端就可以顺利地读取数据了。再一次尝试着使用两个命令行窗口去连接数据库,就能够得到正确的结果了。如果不再需要服务器,那么使用 NetworkServerControl 的 shutdown 参数就能够关闭服务器。
更多
至此,文章介绍了 Java SE 6 中的新成员:Java DB(Derby),也介绍了如何在内嵌模式以及网络服务器模式下使用 Java DB。当然这只是浅尝辄止,更多高级的选项还需要在 Sun 和 Derby 的文档中寻找。在这一章的最后,我们将简单介绍几个 Java DB 的小工具来加快开发速度。它们都位于 org.apache.derby.tools 包内,在开发过程中需要获取信息或者测试可以用到。
• ij:一个用来运行 SQL 脚本的工具;
• dblook:为 Derby 数据库作模式提取(Schema extraction),生成 DDL 的工具;
• sysinfo:显示系统以及 Derby 信息的工具类;

分享到:
评论
2 楼 kilroy 2008-10-15  
LZ知道怎么对文件系统中的*.dat文件减肥不?尽管删除了数据,但是分配的空间并没有减少.
1 楼 qichunren 2008-02-15  
感觉这个JAVA DB和HSQL有些相同啊,请问它们两个有什么不同吗?
有谁知道这个,可否说明一下

相关推荐

    java操作javaDB数据库程序实例

    两个java程序,一个是以嵌入式访问javadb,一个以网络模式访问javadb。 两个程序均已实际调通并运行成功。 带有编译两个java程序的命令。 这个程序做了大多数数据库应用都可能会做的操作: 在 DBMS 中创建了一个名...

    java db2数据库驱动

    Java DB2数据库驱动是用于Java应用程序与IBM DB2数据库之间通信的关键组件。这些驱动程序使得开发者能够在Java环境中执行SQL查询,进行数据操作和管理DB2数据库。在本篇中,我们将详细探讨Java连接DB2数据库所需的...

    java数据库驱动包

    Java数据库驱动包是Java应用程序与各种数据库之间进行通信的关键组件。在Java中,JDBC(Java Database Connectivity)是一个标准API,允许程序员用Java语言来访问和处理存储在各种数据库中的数据。这个压缩包包含了...

    JAVA数据库驱动 DB2 JDBC驱动

    Java数据库连接(JDBC)是Java编程语言中用于与各种数据库进行交互的一种API。DB2是IBM开发的关系型数据库管理系统,广泛应用于企业级应用。在Java中,通过JDBC驱动程序,开发者可以编写代码来执行SQL语句,操作DB2...

    Java嵌入式NoSQL数据库之Berkeley DB Java Edition

    **Java嵌入式NoSQL数据库之Berkeley DB Java Edition** Berkeley DB Java Edition(简称BDB JE)是一种高性能、轻量级的嵌入式数据库系统,由Oracle公司开发,广泛应用于需要快速数据存储和检索的应用场景。它并非...

    使用 Java DB (Derby) 数据库

    - 在“服务”窗口中,右键单击 "JavaDB" 数据库节点,选择“属性”。 - 输入 JavaDB 根目录 (javadb) 的路径。 - 设置数据库位置,可以使用创建的 Home 目录或者保留默认设置。 - 单击“确定”。 - **启动...

    Java DB 10.8版本 官方技术手册合集(英文版

    Java DB(英文全称data base,数据库)是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用...

    javadb 连接数据库的JAVA示例.rar_javadb_javadb-2.2.tar

    JavaDB,全称为Apache Derby,是Java平台上的一个开源、免费的关系型数据库管理系统,由Apache软件基金会维护。它轻量级、嵌入式且完全符合SQL标准,是初学者和小型应用程序的理想选择。本示例将详细介绍如何使用...

    db2 数据库驱动jar包 db2java.jar,db2jcc.jar,db2_license_cu.jar

    在Java编程环境中,连接和操作DB2数据库通常需要特定的驱动程序,这些驱动程序以Java类库(JAR)的形式存在。标题和描述中提到的三个JAR文件——db2java.jar、db2jcc.jar和db2_license_cu.jar,正是用于建立Java应用...

    java多个数据库实现数据同步

    6. **数据复制和迁移工具**:如Oracle GoldenGate、MySQL Replication或Apache Sqoop等,专门用于数据库之间的数据同步。这些工具提供了丰富的配置选项和强大的性能,但可能需要额外的学习成本。 7. **微服务架构**...

    db2数据库驱动9.7jar包

    db2jcc4.jar支持JDBC 4.0规范,因此适用于运行在Java 6及更高版本的环境。 2. **db2jcc.jar** - 这是DB2 JDBC驱动的早期版本,可能不包含所有JDBC 4.0特性。虽然db2jcc4.jar通常推荐用于新项目,但db2jcc.jar可能在...

    Java连接db2 数据库jar包 db2jcc.jar db2jcc_license_cu.jar

    1. `db2jcc.jar`:这个文件是DB2 Universal JDBC Driver(Java数据库连接驱动)的主要部分。它包含了Java代码,使得Java应用程序能够通过JDBC接口与DB2数据库进行通信。JDBC驱动程序是一个标准接口,允许Java应用...

    java链接数据库DB类

    MVC开发模式时连接数据库的源代码,sqlserver数据库和java的链接

    Java 课件Java 数据库连接 vb数据库 数据库爱好 数据

    【Java 数据库连接】在Java编程中,与数据库的连接是通过JDBC(Java Database Connectivity)API实现的。JDBC是Java平台的标准接口,允许Java应用程序连接到各种类型的数据库。开发者可以通过加载数据库驱动,建立...

    javaDB的数据库的配置安装[归类].pdf

    JavaDB 数据库配置安装详解 JavaDB 是一个基于 Java 的关系数据库管理系统,由 Apache 软件基金会开发和维护。JavaDB 也被称为 Derby,是一个开源的关系数据库管理系统,支持标准的 SQL 语句,能够在 Java 应用程序...

    安装javaDB

    JavaDB,也称为Derby,是Oracle公司提供的一款开源、轻量级的关系型数据库管理系统,它是Java平台上的一个重要组成部分,特别适合于嵌入式应用和小型项目。本指南将详细阐述如何安装JavaDB,以及如何进行基本的配置...

    java 数据库编程.pdf

    Java数据库编程是利用Java语言进行数据库操作的技术,它让Java应用程序能够实现对数据库的查询、更新、管理等功能。在现代的应用开发中,数据库编程是不可或缺的一部分,因此掌握Java与数据库交互的能力对于Java...

    Java连接db2数据库的Jar包

    Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包

    通过JDBC通过java连接DB2数据库

    ### 通过JDBC使用Java连接DB2数据库的关键知识点 #### JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成...

    db_driver.rar_Java DB2 Driver_db2java.jar_informix_java database

    本文将深入探讨标题“db_driver.rar_Java DB2 Driver_db2java.jar_informix_java database”所涉及的知识点,包括Java数据库连接(JDBC)驱动、DB2 Java驱动(db2java.jar)、Informix数据库、Oracle数据库以及Java...

Global site tag (gtag.js) - Google Analytics