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

用Apache Derby进行Java数据库开发-离线开发

阅读更多

开始编写 Java 代码之前,请先参考另一篇文章 Apache Derby 入门,用Apache Derby构建脱机Ajax。

 

首先应该了解 JDBC API 的性质,JDBC 是正式的 Java Database Connectivity API,而且从 Java Development Kit 的 1.1 版本开始就存在了。JDBC API 包含在 java.sql 包中,如果仔细观察,您会发现这个 API 主要由接口组成。因此,创建数据库 JDBC 驱动程序的实际工作由数据库厂商(或第三方)负责,他们必须提供实现这些接口的 Java 类。javax.sql 包中的 JDBC API 扩展提供更高级的功能。

 

关于 JDBC 还有最后一点要注意:Java 应用程序和数据库之间的连接由 JDBC 驱动程序控制。原来有 4 种 JDBC 驱动程序类型,由它们的类型号区分:1、2、3 或 4。类型与 Java 应用程序和数据库进行通信所用的技术对应。当今的大多数驱动程序(包括用来连接 Derby 数据库的驱动程序)是 Type 4 驱动程序,这意味着它们是完全用 Java 语言编写的,它们直接将 JDBC API 转换为厂商特定的数据库协议。对于 Derby 数据库,这个过程就更简单了,因为 Derby 是用 Java 语言编写的!

 

	private static final String driver = "org.apache.derby.jdbc.EmbeddedDriver";
	private static final String url = "jdbc:derby:test;create=true";

	public static void main(String[] args) {
		Connection con = null;
		DatabaseMetaData dbmd = null;

		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url);

			// Use the database connection somehow.

		} catch (SQLException se) {
			printSQLException(se);
		} catch (ClassNotFoundException e) {
			System.out.println("JDBC Driver " + driver
					+ " not found in CLASSPATH");
		} finally {
			if (con != null) {
				try {
					con.close();
				} catch (SQLException se) {
					printSQLException(se);
				}
			}
		}
	}

 

 

 

    DatabaseMetaData dbmd = null ;
    dbmd = con.getMetaData() ;
    System.out.println("\n----------------------------------------------------") ;
    System.out.println("Database Name    = " + dbmd.getDatabaseProductName()) ;
    System.out.println("Database Version = " + dbmd.getDatabaseProductVersion()) ;
    System.out.println("Driver Name      = " + dbmd.getDriverName()) ;
    System.out.println("Driver Version   = " + dbmd.getDriverVersion()) ;
    System.out.println("Database URL     = " + dbmd.getURL()) ;

如前面的示例所示,为了访问适当的元数据,首先要从当前的 JDBC Connection 创建一个新的 DatabaseMetaData 对象。然后,可以调用 Apache Derby JDBC 驱动程序提供的许多元数据函数。在这个示例中,检索了正在访问的数据库的名称和产品版本号、用来访问数据库的 JDBC 驱动程序的名称和版本号以及标识已经连接到的数据库的完整 JDBC URL。如果要开发的数据库应用程序必须与许多不同的数据库或 JDBC 驱动程序进行交互,那么数据库元数据是最有用的。在这种情况下,可以使用元数据在运行时判断特定数据库和 JDBC 驱动程序的能力。

 

 

    private static void printSQLException(SQLException se) {
        while(se != null) {
            System.out.print("SQLException: State:   " + se.getSQLState());
            System.out.println("Severity: " + se.getErrorCode());
            System.out.println(se.getMessage());            
            
            se = se.getNextException();
        }
     }

    private static void printSQLWarning(SQLWarning sw) {
        while(sw != null) {
            System.out.print("SQLWarning: State=" + sw.getSQLState()) ;
            System.out.println(", Severity = " + sw.getErrorCode()) ;
            System.out.println(sw.getMessage()); 
            
            sw = sw.getNextWarning();
        }
    }

 

处理 SQL 异常和 SQL 警告是相似的。SQLWarning 类继承自 SQLException 类;但是 SQL 警告不如 SQL 异常那么严重,所以更好的方法是分别处理它们。这两个函数都声明为 private static,因此可以从 main 方法中调用它们,但是不能从其他类调用。在生产性代码中,可以根据程序的需求修改这一声明。

在这两个函数中,循环处理警告或异常。这在一般的错误处理场景中可能有点儿奇怪,但是在涉及数据库编程时就很常见了。出现多个警告或异常的原因很简单:在数据库中事件常常连接在一起。例如,如果在数据库中插入多行,而且它们都由于列数据类型或名称不匹配而无法插入,那么就会有多个错误。为了正确地考虑所有错误,需要能够将异常连接在一起,从而让进行调用的代码知道数据库遇到的所有问题。为了简化,Apache Derby 总是将最重要的异常放在异常链的开头。

在循环中,输出错误或警告信息。SQL 状态是一个五字符的字符串,它符合 X/OPEN Common Application Environment(CAE)规范、Data Management: SQL, Version 2 SQL 规范或 SQL99 标准约定,使程序能够从特定的数据库错误中恢复过来。SQL 状态的前两个字符是一个类值,后三个字符形成子类值。SQL 状态为 00000 值就表示成功,类值为 01 就表示警告,比如数据截断。SQL 编码是与数据库相关的值。

 

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.DatabaseMetaData;

public class FirstConnect {
    private static final String driver = "org.apache.derby.jdbc.EmbeddedDriver" ;
    private static final String url = "jdbc:derby:test;create=true" ;
    
    static void printSQLException(SQLException se) {
        while(se != null) {

            System.out.print("SQLException: State:   " + se.getSQLState());
            System.out.println("Severity: " + se.getErrorCode());
            System.out.println(se.getMessage());            
            
            se = se.getNextException();
        }
    }
        
    static void printSQLWarning(SQLWarning sw) {
        while(sw != null) {

            System.out.print("SQLWarning: State=" + sw.getSQLState()) ;
            System.out.println(", Severity = " + sw.getErrorCode()) ;
            System.out.println(sw.getMessage()); 
            
            sw = sw.getNextWarning();
        }
    }

    public static void main(String[] args) {
        Connection con = null ;
        DatabaseMetaData dbmd = null ;
        
        try {
            Class.forName(driver) ;
            con = DriverManager.getConnection(url);

            SQLWarning swarn = con. getWarnings() ;
            
            if(swarn != null){
                printSQLWarning(swarn) ;
            }
            
            dbmd = con.getMetaData() ;
            
            System.out.println("\n----------------------------------------------------") ;
            System.out.println("Database Name    = " + dbmd.getDatabaseProductName()) ;
            System.out.println("Database Version = " + dbmd.getDatabaseProductVersion()) ;
            System.out.println("Driver Name      = " + dbmd.getDriverName()) ;
            System.out.println("Driver Version   = " + dbmd.getDriverVersion()) ;
            System.out.println("Database URL     = " + dbmd.getURL()) ;
            System.out.println("----------------------------------------------------") ;
            
        } catch (SQLException se) {
            printSQLException(se) ;
        } catch(ClassNotFoundException e){
            System.out.println("JDBC Driver " + driver + " not found in CLASSPATH") ;
        }
        finally {
            if(con != null){
                try{
                    con.close() ;
                } catch(SQLException se){
                    printSQLException(se) ;
                }
            }
        }
    }
}

 

Apache Derby下载地址

另一篇文章:用Apache Derby构建脱机Ajax

分享到:
评论

相关推荐

    Apache Derby 10.5版手册集

    通过上述手册,用户和开发者能够全面地学习和掌握如何使用Apache Derby进行数据库管理、开发和维护工作。手册中的内容既包括了基础操作,也有高级的配置和故障排除,对于不同层次的用户都是十分有帮助的。 在实际...

    Apache Derby 10.8版手册集

    - Derby Developer's Guide for 10.8版本:开发者指南专注于向开发人员介绍如何使用Derby进行应用开发,包括如何利用JDBC API进行数据库编程,以及如何在不同开发环境中集成和使用Derby。 - Derby Tools and ...

    无涯教程(LearnFk)-Derby教程离线版.pdf

    Apache Derby是一个开源的数据库管理系统,它是由Apache软件基金会开发的。Derby数据库的特点是完全用Java语言编写的,这意味着它具有良好的跨平台性,可以在任何安装了Java虚拟机(JVM)的平台上运行。这种设计使得...

    Java嵌入式数据库程序的开发.pdf

    使用JDBC(Java Database Connectivity)API可以方便地连接到Derby数据库,并执行SQL语句进行数据查询、更新和管理。编程时,需要正确加载数据库驱动,创建连接,并通过Statement和ResultSet等类来操作数据。 文档...

    apache-hive-2.2.0-bin.tar.gz

    此外,还需要配置元存储(metadata store),通常使用MySQL或Derby作为后端数据库,存储表的元数据。一旦设置完成,你就可以使用Hive命令行或者连接工具来创建表、导入数据、执行查询,并将结果导出到各种格式。 ...

    apache-hive-3.1.2-bin.tar.gz

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like的语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。在大数据处理领域,Hive扮演了重要的角色,因为它提供了易用的数据接口...

    apache-hive-2.3.9,linux安装包

    这一步是可选的,你可以选择使用内建的Derby数据库,但MySQL更适用于生产环境。 将Hive的`bin`目录添加到系统路径中,以便于在任何地方运行Hive命令: ```bash export PATH=$PATH:/usr/local/hive/bin ``` 最后,...

    MyEclipse6的使用

    通过以上介绍,《MyEclipse6 Java EE 开发中文手册》不仅涵盖了 MyEclipse6 的安装配置,还详细讲解了如何使用 MyEclipse6 进行 Java 应用程序开发以及数据库管理。这本手册对于想要学习和掌握 MyEclipse6 的开发者...

    Hive初识入门参考的笔记

    默认使用 Derby 数据库存储,但推荐使用 MySQL 来提高性能和稳定性。 - **Hadoop 集成**: - **数据存储**:使用 HDFS 进行数据存储。 - **计算框架**:使用 MapReduce 进行数据处理。 - **驱动组件**:Driver ...

    《Hadoop 数据分析平台》课程毕业测试题

    - **解释**: Hive是一个基于Hadoop的数据仓库工具,它使用数据库来存储表的元数据,默认情况下使用Derby作为数据库。因此,正确答案是A:Derby。 ### 22. Mahout的功能 - **知识点**: Mahout主要用于机器学习算法的...

    spring-jdbc-4.2.xsd.zip

    在Java企业级开发中,Spring框架是不可或缺的一部分,它提供了全面的编程和配置模型,极大地简化了应用的构建和维护。Spring JDBC作为Spring框架的一部分,主要负责数据库操作,使得开发者可以更加便捷地进行数据...

    hive初始入门

    - 默认情况下,元数据存储在自带的 Derby 数据库中,但更常见的是将其存储在 MySQL 数据库中以获得更好的性能和可靠性。 - **Hadoop 集成** - 使用 HDFS (Hadoop Distributed File System) 来存储数据。 - 利用 ...

    大数据工具资料收集之hive.pdf

    - **单用户模式**:使用内嵌的Derby数据库,主要用于单元测试。 - **多用户模式**:通过网络连接到数据库,是最常见的使用方式。 - **远程服务器模式**:对于非Java客户端,通过MetaStoreServer和Thrift协议访问...

    Hive编程指南.pdf

    - **Hive与HBase**:HBase是NoSQL数据库,适用于实时查询,而Hive适合离线分析,二者可以结合使用。 - **Hive与Impala**:Impala提供了更快速的查询性能,常用于交互式查询。 6. **Hive的应用场景** - **数据...

    hive影评案例.rar

    Hive是Apache软件基金会开发的一个数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL(HQL,Hive Query Language)查询功能,用于处理大规模数据集。Hive的主要优点包括高可扩展性、容错性和...

    大数据系列-Hive入门与实战.pptx

    1. **元数据**:元数据存储了关于 Hive 数据库、表、列、分区及其属性的信息,通常存储在外部的关系型数据库如 MySQL 或 Derby 中。 2. **用户接口**: - CLI(Command Line Interface):提供命令行接口直接与 ...

    hive-0.10.0.tar.gz

    Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)上的大数据集。Hive-0.10.0是该软件的一个早期版本,尽管较新版本可能包含更多改进...

    第7讲Hive数据仓库.pptx

    内嵌模式使用内嵌的Derby数据库,只允许单个会话;本地独立模式将元数据存储在本地安装的MySQL中;远程模式则将元数据放在远程MySQL服务器上。安装过程包括下载Hive、设置环境变量、配置文件(如修改`hive-env.sh`和...

Global site tag (gtag.js) - Google Analytics