一.JDBC(Java DataBase Connectivity standard)

1.JDBC,它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。

2. 驱动程序(JDBC driver)

要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。

3.DBMS

4.三者之间的联系

JDBC API调用驱动程序来访问DBMS

二.ODBC(Open Database Connectivity,开放数据库互连)

ODBC是微软公司建立的一组规范,提供了一组对数据库访问的标准API。

1. ODBC管理器(Administrator)

该程序主要任务是管理安装的ODBC驱动程序和管理数据源。

2. 驱动程序管理器(Driver Manager)

驱动程序管理器的任务是管理ODBC驱动程序,是ODBC中最重要的部件。

3. ODBC 驱动程序

是微软公司提供的,提供了ODBC和数据库之间的接口。

4. 数据源

数据源包含了数据库位置和数据库类型、驱动程序等信息,实际上是一种数据连接的抽象。

5. 各部件之间的关系

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源建立起ODBC与具体数据库的联系。

在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。

三.JDBC连接DBMS的方式

1.JDBC连接DBMS

(1)导入包:

这需要你有软件包包含了数据库编程所需的JDBC类。大多数情况下,使用import java.sql.* 就足够了,如下所示:

//STEP 1. Import required packages
import java.sql.*;

(2)加载JDBC驱动程序:

这需要初始化驱动程序,这样就可以打开与数据库的通信信道。以下是代码片段实现这一目标:

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

(3)建立连接:

这需要使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个物理连接的数据库,如下所示:

//STEP 3: Open a connection
// Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

(4)执行一个查询:

这需要使用一个对象类型Statement或PreparedStatement构建,并提交一个SQL语句到数据库。如下:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

如果有一个SQL UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);

(5)从结果集中提取数据:

这一步是必需的情况下,从数据库中获取数据。可以使用适当的ResultSet.getXXX()方法来检索的数据结果如下:

//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");

//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}

(6)清理环境:

应该明确地关闭所有的数据库资源,对依赖于JVM的垃圾收集如下:

//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();

2.JDBC-ODBC桥连接

(1)建立数据源

(2)加载驱动程序

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

(3)建立连接

Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");、

JDBC URL 将以 jdbc:odbc 开始:余下 URL 通常是你的数据源名字或数据库系统。

(4)同JDBC方式的(4)(5)(6)相同。

四.JDBC和ODBC的区别

1. jdbc是java通过网络访问db的url连接的方式;odbc是本地建立连接后再使用的方式。

或者说:前者是数据库官方版本,后者是符合规范的通用版本。

2. 驱动不同:JDBC的驱动程序由数据库厂商提供,ODBC驱动程序由微软提供。

3. java中一般采用JDBC连接 或JDBC-ODBC桥连接;java不直接调用ODBC API的原因是 ODBC采用C语言编写, 在移植性、安全性方面有欠缺。

4. JDBC-ODBC桥连接 一般用于本地学习或者局域网内使用;而JDBC方式可实现跨平台移植,适用范围广。

5. JDBC-ODBC桥连接一般用在JDK 5 以前。由于在JDK 5 以前,服务器厂商没有提供JDBC驱动程序,只能采用ODBC桥连接。

五、Access数据库连接示例

  连接Access数据库时应该只有JDBC-ODBC桥接方式,没有JDBC方式。

import java.sql.*;

public class dbconn {
  static final String DBDriver ="sun.jdbc.odbc.JdbcOdbcDriver";
  static final String strConn ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:/apache-tomcat-6.0.45/webapps/site/DB/dataDB.mdb";
  static final String DBusername="";
  static final String DBpassword="";
  Connection conn=null;
  ResultSet rs=null;
  public static String dbconn() {
    String sErr = "";
    try {
      java.sql.DriverManager.registerDriver((java.sql.Driver)(Class.forName(DBDriver).newInstance()));
    }catch (Exception e) {
      sErr = e.toString();
    }
      return (sErr);
  }

  java.sql.Connection cn() throws SQLException {
    return java.sql.DriverManager.getConnection(strConn , DBusername, DBpassword);
  }

}

JDBC ODBC区别的更多相关文章

  1. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  2. JNDI 和JDBC的区别

    1.JNDI 和JDBC的区别和联系.两者都是API,是一个标准.并不是什么产品或方法.JDBC 全称:Java Database Connectivity 以一种统一的方式来对各种各样的数据库进行存 ...

  3. JSP使用JDBC ODBC 实例

    1.JDBC ODBC Brige driver是JSP连接数据库的驱动,只要安装了JDK这个驱动就默认安装了 2. 配置JDBC ODBC数据源的步骤:http://blog.csdn.net/li ...

  4. 概念学习 - JNDI, JDBC, ODBC, DataSource

    layout: post title: 概念学习 - JNDI, JDBC, ODBC, DataSource --- 最近在学习Java Hibernate,对数据库资源访问这块好多概念模糊,所以在 ...

  5. 简述 Hibernate 和 JDBC 的区别、优缺点

    1.hibernate是一个开源的.采用面向对象的思想实现ORM映射框架,它对jdbc进行了一层封装,对于数据库的连接.关闭.数据的持久化(增删改查).事务的管理都进行了封装,使得程序开发的时候可以用 ...

  6. java 8: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

    转眼之间, java 11都快要推出了. 而我一直都在 java 7环境下写代码,真的不想升级,不想改变什么,可世界每天都在变化. 最近因为服务端需要SNI,而 java 7 只支持客户端的SNI,只 ...

  7. Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案

    Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案 1. 跨语言db api兼容性..1 2. 目前访问数据库的接口很多.比较常用的jdbc odbc 以 ...

  8. JNDI和JDBC的区别和联系及其使用方法

    一.JNDI 和JDBC的区别和联系 两者都是API,是连接数据库的标准.并不是什么产品或方法. 二.JDBC 全称:Java Database Connectivity 以一种统一的方式来对各种各样 ...

  9. Connection conn = DriverManager.getConnection("jdbc:odbc:bbs");

    Connection conn = DriverManager.getConnection("jdbc:odbc:bbs"); 这是JDBC连接数据库的时候用的一句话,,Conne ...

随机推荐

  1. sql server几种读写分离方案的比较

    在生产环境中我们经常会遇到这种情况: 前端的oltp业务很繁忙,但是需要对这些运营数据进行olap,为了不影响前端正常业务,所以需要将数据库进行读写分离. 这里我将几种可以用来进行读写分离的方案总结一 ...

  2. 使用ansible编译安装运维工具tmux

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 软件介绍:tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD, ...

  3. [HTML]输入框被限制输入某些类型数据

    ENTER键可以让光标移到下一个输入框 <input onkeydown="if(event.keyCode==13)event.keyCode=9" > 只能是中文& ...

  4. [bootstrap]bootstrap2如何引导div垂直居中

    参考网址:http://www.4byte.cn/question/138712/bootstrap-how-to-center-vertical.html 部分参考自上面网页中的方法.用过boots ...

  5. MVC PartialView

      参考 Updating an MVC Partial View with Ajax RenderPartial vs RenderAction vs Partial vs Action in MV ...

  6. 洛谷P1119 灾后重建[Floyd]

    题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...

  7. Spring远程调用技术<2>-Hessian和Burlap

    上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样 ...

  8. ArrayList 保证多线程安全

    一:使用synchronized关键字 二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List<Map<String,Obje ...

  9. Iterator接口。集合输出

    在集合中支持以下几种方式. iterator ListIterator foreach输出 emumeration输出. 集合输出的标准操作: 集合输出的时候必须形成以下的思路:只要碰到了集合输出的操 ...

  10. 国内外前端(js)开发框架对比

    国内外前端开发框架对比 首先我们先对目前国内外主流前端开发框架做一个基本的了解,之后再对他们进行一个直观的对比. Bootstrap Bootstrap(http://www.bootcss.com) ...