`
coderplay
  • 浏览: 575151 次
  • 性别: Icon_minigender_1
  • 来自: 广州杭州
社区版块
存档分类
最新评论

几种数据库的jdbc驱动实现

    博客分类:
  • misc
阅读更多

要实现自己的JDBC驱动,最重要的是实现以下几个接口:

  • java.sql.Driver
  • java.sql.Connection
  • java.sql.Statement
  • java.sql.ResultSet

这篇文章讲解了如何实现一个简单的jdbc驱动: http://www.javaworld.com/javaworld/jw-05-2002/jw-0517-jdbcdriver.html

 

但是一个成熟的jdbc驱动, 光实现以上4个接口是不够的。用户经常使用数据库的元数据(metadata)信息, 比如返回某个库中所有表的相关信息; 或者结果集(ResultSet)的元数据信息, 比如返回某结果集所有列的列名。靠以上4接口不能实现,所以还得实现一些java.sql.XXMetaData的接口,另外还有一些例如java.sql.DataSource, java.sql.Savepoint都是比较重要的。

1. cloudbase

对于所有jdbc实现来说, Driver接口最重要的方法就是connect().以下是cloudbase中CBDriver的connect()方法实现.

  public Connection connect( String url, java.util.Properties info)
    throws SQLException
  {
    if( !acceptsURL( url))
    {
      return null;
    }

    String[] connParams = parseUrl( url);
    String host = connParams[0];
    int port = Integer.parseInt( connParams[1]);
    String user = "test";
    String password = "test";
    CBConnection conn = new CBConnection( host, port, user, password);
    return conn;
  }
 

客户端通过CBConnection建立一个socket连接到CBServer上去, 形成一个输入和一个输出流。

CBConnection( String server, int port, String user, String pass)
    throws SQLException
  {
    try
    {
      socket = new Socket( server, port);
      socket.setSoTimeout( 900);
      
      InputStream inStream = socket.getInputStream( );
      InputStreamReader inStreamReader = new InputStreamReader( inStream);
      sockIn = new BufferedReader( inStreamReader);
      sockOut = new PrintStream( socket.getOutputStream( ));
      
      String payload = user + "\t" + pass;
      sockOut.println( payload);
      
      String dbMetaDataStr = sockIn.readLine( );
      dbMetaData = new CBDBMetaData( this, dbMetaDataStr);
      
      this.port = port;
      this.user = user;
      this.server = server;
      cmdMap = new Hashtable<String,Callback>( );
      srr = new ServerResponseReader( );
      srr.start( );
    }
...
  }
 


客户端连接的时候首先把user和password写入到输入流中, 服务端CBServer验证后,会把数据库的元数据(DataBaseMetaData)信息发信给客户端, 见com.business.cloudbase.net.DBMetaData类, 它把数据库元数据放入到一个map中,通过StringBuiilder把这个map序列化写入到socket接收端。

 

下面说以两个例子说明cloudbase的jdbc驱动是怎么工作的:

(1) sql查询

(2) 获得当前库所有表的信息

JDBC中DataBaseMetaData.getTables()方法实现此接口, 返回ResultSet类型。此结果集包含以下几列:

  1. TABLE_CAT String => 表类别(可为 null
  2. TABLE_SCHEM String => 表模式(可为 null
  3. TABLE_NAME String => 表名称
  4. TABLE_TYPE String => 表类型。典型的类型是 "TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"。
  5. REMARKS String => 表的解释性注释
  6. TYPE_CAT String => 类型的类别(可为 null
  7. TYPE_SCHEM String => 类型模式(可为 null
  8. TYPE_NAME String => 类型名称(可为 null
  9. SELF_REFERENCING_COL_NAME String => 有类型表的指定 "identifier" 列的名称(可为 null
  10. REF_GENERATION String => 指定在 SELF_REFERENCING_COL_NAME 中创建值的方式。这些值为 "SYSTEM"、"USER" 和 "DERIVED"。(可能为 null

这是jdbc规定的。

 

2. hsqldb

hsqldb把数据库的元数据也存在hsqldb的表中, 这些表是系统表. 因此获取元数据,就是select系统表的数据.

Server端每接收到一个客户端的连接, 就建立一个线程和一个新的会话(Session).

 

3. derby

derby的服务器端实现在drba包里.

 

分享到:
评论

相关推荐

    sybase 数据库 jdbc 驱动下载

    对于Sybase数据库,JDBC驱动主要有以下几种类型: 1. **类型1(纯Java驱动)**:也称为桥接驱动,它依赖于数据库供应商提供的ODBC驱动。这种驱动不适用于所有平台,因为需要安装ODBC驱动。 2. **类型2(部分Java...

    impala数据库JDBC驱动集

    在本压缩包"impala数据库JDBC驱动集"中,我们很显然会找到用于连接和操作Impala数据库的JDBC驱动程序。 Impala的主要特点包括其并行查询执行模型,它能够快速地处理PB级别的数据,而无需将数据从HDFS或HBase中提取...

    各数据库jdbc驱动包

    本文将深入探讨标题中提到的几个数据库及其对应的JDBC驱动包,包括MySQL、Microsoft SQL Server 2000/2005以及Oracle。 首先,MySQL是一款开源、免费的关系型数据库管理系统,广泛应用于Web应用开发。其JDBC驱动包...

    JAVA开发 JDBC驱动包 全套的数据库jdbc驱动包

    本资源包含了一套完整的JDBC驱动包,涵盖了SQL、ORACLE、MYSQL、ACCESS以及SYBASE等主流数据库系统。 1. **SQL驱动包**:这里的"SQL驱动包"可能指的是通用的JDBC驱动,用于支持SQL标准的数据库,如PostgreSQL、SQL ...

    达梦7数据库JDBC驱动包

    达梦数据库提供的JDBC驱动很可能是Type 4,因为它是纯Java实现,能跨平台运行,并且支持多种JDK版本。 对于Jdk1.4到Jdk1.7的不同版本,这是因为这些版本在Java的发展历史上占有重要地位,不同的应用程序可能基于...

    sybase数据库jdbc驱动jar包

    "sybase数据库jdbc驱动jar包"即为实现这一功能的Java库文件。 JDBC驱动是Java与各种数据库之间通信的桥梁,它提供了Java API,使得Java程序员能够编写数据库无关的代码。对于Sybase数据库,JDBC驱动主要有两种类型...

    GaussDB-driver 高斯数据库驱动 包含jdbc odbc GDS

    GaussDB的JDBC驱动可能是类型4,因为它无需依赖数据库供应商的本地库,直接通过网络与数据库通信。 2. ODBC(Open Database Connectivity)驱动:ODBC是微软提供的一个标准API,它使得不同的数据库系统可以被...

    数据库JDBC驱动比较

    【数据库JDBC驱动比较】 Java Database Connectivity (JDBC) 是Java平台中用于与关系数据库进行交互的API。本文主要对比了几种常见数据库的JDBC驱动,包括Oracle、DB2、SQL Server、Sybase ASE和Informix IDS,以及...

    access的jdbc驱动

    Access的JDBC驱动是Java数据库连接(Java Database Connectivity, JDBC)的一种实现,它允许Java程序与Microsoft Access数据库进行交互。在JDK 1.8之后,Oracle公司不再默认提供对ODBC(Open Database Connectivity...

    jdbc的常用数据库驱动jar包

    5. **H2数据库JDBC驱动**: H2是一个开源的关系型数据库管理系统,它的JDBC驱动h2.jar是与数据库一起提供的。H2可以运行在内存中,也可以保存到磁盘,适用于测试和开发环境。 使用这些JDBC驱动,开发者可以执行SQL...

    JAVA连接数据库 JDBC驱动汇总

    ### JAVA连接数据库JDBC驱动汇总 #### 一、概述 在Java开发中,与数据库进行交互是必不可少的一个环节。为了实现这一目标,Java提供了多种方式来连接不同的数据库系统,其中最为广泛使用的便是JDBC(Java Database...

    常用数据库驱动和JDBC+URL

    每种数据库系统都有自己的JDBC驱动程序,用于确保Java应用程序能够与数据库有效交互。接下来,我们将详细解释文档中提到的不同数据库驱动程序和它们的JDBC URL格式。 描述中提到的“JDBC连接方法及驱动的使用”指的...

    IBM DB2 jdbc 驱动 for v10.5(官方版)

    首先,IBM DB2 JDBC驱动分为几种类型: 1. Type 1驱动(JDBC-ODBC桥接):这种类型的驱动依赖于ODBC驱动来与DB2通信,适合于已经安装了ODBC数据源的情况。但在Java环境中,Type 1驱动并不是首选,因为它需要额外的...

    各个类型数据库的JDBC驱动汇总

    JDBC驱动是Java应用程序与数据库通信的关键组件,它们实现了JDBC API,允许Java代码执行SQL查询、事务管理、数据检索等功能。不同的数据库厂商提供了不同特性的驱动,以满足特定数据库系统的功能需求。了解并正确...

    Kingbase_v8_R3JDBC驱动.zip

    Kingbase_v8_R3JDBC驱动是人大金仓数据库(Kingbase)针对Java应用程序提供的一种数据库连接驱动,它遵循Java Database Connectivity (JDBC) API标准,使得Java开发者能够方便地在Java环境中访问和操作Kingbase...

    Pi数据库驱动包 jar包

    JDBC驱动则是实现这些接口的具体类库,负责处理与特定数据库的通信细节。在本例中,“Pi数据库驱动包”扮演的就是这样的角色,它提供了连接、查询、更新和管理Pi数据库的Java API。 Pi数据库是一种专为工业应用设计...

    常用 JDBC 驱动名字和 URL 列表

    本文详细介绍了几种常见的 JDBC 驱动及其对应的 URL 格式,这对于 Java 开发者来说是非常宝贵的资源。了解并掌握这些信息可以帮助开发者更加高效地与各种关系型数据库进行交互,从而提高应用程序的功能性和性能。...

    jdbc 驱动包合集

    本合集包含了几个主要的数据库厂商的JDBC驱动JAR包,包括Oracle、Microsoft SQL Server、SQLite、PostgreSQL以及IBM的DB2。 1. **Oracle JDBC驱动**:Oracle数据库的JDBC驱动分为 Thin 和 Thick 模式。Thin驱动是纯...

    JDBC连接MySQL数据库8.0.13的驱动包

    JDBC驱动是Java程序连接数据库的核心组件,它充当了Java虚拟机和数据库之间的桥梁。 在本案例中,"JDBC连接MySQL数据库8.0.13的驱动包" 提供了连接MySQL 8.0.13版本数据库所需的Java驱动程序。MySQL是一种开源、...

Global site tag (gtag.js) - Google Analytics