开始编写 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进行数据库管理、开发和维护工作。手册中的内容既包括了基础操作,也有高级的配置和故障排除,对于不同层次的用户都是十分有帮助的。 在实际...
- Derby Developer's Guide for 10.8版本:开发者指南专注于向开发人员介绍如何使用Derby进行应用开发,包括如何利用JDBC API进行数据库编程,以及如何在不同开发环境中集成和使用Derby。 - Derby Tools and ...
Apache Derby是一个开源的数据库管理系统,它是由Apache软件基金会开发的。Derby数据库的特点是完全用Java语言编写的,这意味着它具有良好的跨平台性,可以在任何安装了Java虚拟机(JVM)的平台上运行。这种设计使得...
使用JDBC(Java Database Connectivity)API可以方便地连接到Derby数据库,并执行SQL语句进行数据查询、更新和管理。编程时,需要正确加载数据库驱动,创建连接,并通过Statement和ResultSet等类来操作数据。 文档...
此外,还需要配置元存储(metadata store),通常使用MySQL或Derby作为后端数据库,存储表的元数据。一旦设置完成,你就可以使用Hive命令行或者连接工具来创建表、导入数据、执行查询,并将结果导出到各种格式。 ...
Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like的语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。在大数据处理领域,Hive扮演了重要的角色,因为它提供了易用的数据接口...
这一步是可选的,你可以选择使用内建的Derby数据库,但MySQL更适用于生产环境。 将Hive的`bin`目录添加到系统路径中,以便于在任何地方运行Hive命令: ```bash export PATH=$PATH:/usr/local/hive/bin ``` 最后,...
通过以上介绍,《MyEclipse6 Java EE 开发中文手册》不仅涵盖了 MyEclipse6 的安装配置,还详细讲解了如何使用 MyEclipse6 进行 Java 应用程序开发以及数据库管理。这本手册对于想要学习和掌握 MyEclipse6 的开发者...
默认使用 Derby 数据库存储,但推荐使用 MySQL 来提高性能和稳定性。 - **Hadoop 集成**: - **数据存储**:使用 HDFS 进行数据存储。 - **计算框架**:使用 MapReduce 进行数据处理。 - **驱动组件**:Driver ...
- **解释**: Hive是一个基于Hadoop的数据仓库工具,它使用数据库来存储表的元数据,默认情况下使用Derby作为数据库。因此,正确答案是A:Derby。 ### 22. Mahout的功能 - **知识点**: Mahout主要用于机器学习算法的...
在Java企业级开发中,Spring框架是不可或缺的一部分,它提供了全面的编程和配置模型,极大地简化了应用的构建和维护。Spring JDBC作为Spring框架的一部分,主要负责数据库操作,使得开发者可以更加便捷地进行数据...
- 默认情况下,元数据存储在自带的 Derby 数据库中,但更常见的是将其存储在 MySQL 数据库中以获得更好的性能和可靠性。 - **Hadoop 集成** - 使用 HDFS (Hadoop Distributed File System) 来存储数据。 - 利用 ...
- **单用户模式**:使用内嵌的Derby数据库,主要用于单元测试。 - **多用户模式**:通过网络连接到数据库,是最常见的使用方式。 - **远程服务器模式**:对于非Java客户端,通过MetaStoreServer和Thrift协议访问...
- **Hive与HBase**:HBase是NoSQL数据库,适用于实时查询,而Hive适合离线分析,二者可以结合使用。 - **Hive与Impala**:Impala提供了更快速的查询性能,常用于交互式查询。 6. **Hive的应用场景** - **数据...
Hive是Apache软件基金会开发的一个数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL(HQL,Hive Query Language)查询功能,用于处理大规模数据集。Hive的主要优点包括高可扩展性、容错性和...
1. **元数据**:元数据存储了关于 Hive 数据库、表、列、分区及其属性的信息,通常存储在外部的关系型数据库如 MySQL 或 Derby 中。 2. **用户接口**: - CLI(Command Line Interface):提供命令行接口直接与 ...
Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)上的大数据集。Hive-0.10.0是该软件的一个早期版本,尽管较新版本可能包含更多改进...
内嵌模式使用内嵌的Derby数据库,只允许单个会话;本地独立模式将元数据存储在本地安装的MySQL中;远程模式则将元数据放在远程MySQL服务器上。安装过程包括下载Hive、设置环境变量、配置文件(如修改`hive-env.sh`和...