JDBC 详解

工作原理流程:装载驱动程序---->获得数据库连接---->使用Statement或PreparedStatement执行SQL语句---->

返回执行的结果---->关闭相关的连接

JDBC 原理浅析
一.本节目的:
了解JDBC的概念及工作原理
写在详解前
对JAVA基础知识的回顾:
JAVA接口:
是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,
因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
通过接口可以实现不相关的类的相同行为.
通过接口可以指明多个类需要实现的方法.
通过接口可以了解对象的交互方法而不需要了解对象所对应的类.
二.JDBC 概念:
     什么是JDBC?
     通俗地说:JDBC是java和关系数据库的之间的桥梁;
     根据"百科名片"所描述:
     JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
三.JDBC组成:
    JDBC有两部分组成:JDBC API和JDBC Driver Interface.
    JDBC API:是提供给开发者的一组独立于数据库的API,对任何数据库的操作,都可以用这组API来进行.那么要把这些通用的API翻译成特定数据库能懂的"指令",就要由JDBC Driver Interface来实现了;
    JDBC Driver Interface 是面向JDBC驱动程序开发商的编程接口,它会把我们通过JDBC API发给数据库的通用指令翻译给他们自己的数据库.
    为了使客户端程序独立于特定数据库驱动程序,JDBC规范建议开发者使用接口编程方式,即尽量使应用依赖java.sql 及javax.sql中的接口和类.
   如下图:

四.JDBC驱动程序类型:
    <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合于企业网或三层结构应用程序(通过将JDBC调用委托给ODBC接口)
    <2>.本地API:需要驱动程序的二进制代码支持(一部分java编写,一部分委托给数据库客户端代码实现)
    <3>.JDBC网络纯java驱动程序:将JDBC转换为与DBMS无关的网络协议,又被某服务器转换为一种DBMS协议,以操作各种数据库(驱动程序由中间件服务器提供)
    <4>.本地协议纯java驱动程序:将JDBC调用直接转换成JDBC所使用的网络协议 (全部由JAVA实现,直接和数据库访问)
五.详解JDBC原理:
<1>. 结构:
 DriverManager (桥接模式)
    |
 Dirver  (是驱动程序对象的接口,指向具体数据库驱动程序对象=DriverManager.getDriver(String URL))
    |
 Connection (是连接对象接口,指向具体数据库连接对象=Drivermanager.getConnection(String URL))
    |
 Statement (执行静态SQL语句接口,=Connection.CreateStatement())
    |
 ResultSet  (是指向结果集对象的接口,=Statement.excuteXXX())
<2>.工作原理:
1.装载驱动程序:(实例化时自动向DriverManager注册(DriverManager.registerDriver())
 <1>.Class.forName(driver)
      <2>.Class.forName(driver).newInstance()
       <3>.new driver()
2.取得数据库连接(Connect to the DataBase)
 <1>.用DriverManager取数据库连接
     Connection cn = DriverManager.getConnection(url,uid,pwd);
 <2>.用jndi(java的命名和目录服务)方式:多用于jsp
     Context ctx = (Context) new InitialContext().lookup("java:comp/env");
               DataSource ds = (DataSource) ctx.lookup(jndi);
     Connection cn = ds.getConnection();
3.执行sql语句(Execute the SQL)
 <1>.用Statement来执行sql语句(主要是不带参的SQL)
               Statement sm = cn.createStatement();
     sm.executeQuery(sql); // 执行数据查询语句(select)
     sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)
 <2>.用PreparedStatement来执行sql语句(带参SQL)
     String  sql  = "insert into CUSTOMER(id,name) values (?,?)";
               PreparedStatement ps = cn.prepareStatement(sql);
              ps.setInt(1,xxx);
               ps.setString(2,xxx);
              ...
              ResultSet rs = ps.executeQuery(); // 查询
              int c = ps.executeUpdate(); // 更新
 <3>.用PreparedStatement来执行sql语句(批量更新或删除SQL)
     PreparedStatement pstmt  =  con.prepareStatement("UPDATE EMPLOYEES  SET SALARY = ? WHERE ID = ?");
        for(int i =0;i<length;i++){
                 pstmt.setBigDecimal(1, param1[i]);
                 pstmt.setInt(2, param2[i]);
                 pstmt.addBatch();
         }
         pstmt. executeBatch();
 <4>.用CallablePrepareStatement来调用存储过程
     CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}");
     cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
     cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3);
     cstmt.executeQuery();
     byte x = cstmt.getByte(1);
     java.math.BigDecimal n = cstmt.getBigDecimal(2, 3);

4.事务的处理(JDBC的事务处理简单,在执行多条更新语句后,加cn.commit()或cn.rollback()就可以)
 <1>.关闭Connection的自动提交
     connection.setAutoCommit(false);

<2>.执行一系列sql语句:执行新sql前,以前的Statement(或PreparedStatemet)须close
     Statement sm ;
           sm = cn.createStatement(insert into user...);
           sm.executeUpdate();
           sm.close();
           sm = cn.createStatement("insert into corp...);
           sm.executeUpdate();
           sm.close();

<3>.提交
     cn.commit();
 <4>.如果发生异常,回滚:
     cn.rollback();
5.处理执行结果:
 <1>.查询语句,返回记录集ResultSet
 <2>.更新语句,返回数字,表示该更新影响的记录数(0,表示未更新,-1表示更新失败)
 <3>.ResultSet的方法:while(re.next())
         next(),将游标往后移动一行,如果成功返回true;否则返回false
         getInt("id")或getSting("name"),返回当前游标下某个字段的值
6.关闭数据库连接
 rs.close();
 ps.close(); /stat.close();
 con.close();
完!!!

时间: 2024-08-05 23:18:59

JDBC 详解的相关文章

JDBC详解(2)

1.加载驱动程序. 注册驱动程序有多方法,Class.forName();是一种显式地加载.当一个驱动程序类被Classloader装载后,在溶解的过程中,DriverManager会注册这个驱动类的实例.这个调用是自动发生的,也就是说DriverManager.registerDriver()方法被自动调用了, Class.forName("oracle.jdbc.driver.OracleDriver"); 当然我们也可以直接调用DriverManager.registerDriv

Spring JDBC详解

<Spring JDBC详解> 本文旨在讲述Spring JDBC模块的用法.Spring JDBC模块是Spring框架的基础模块之一. 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJdbcInsert类,SimpleJdbcCall类,以及NamedP

JDBC详解(3)

12.6 searchPerson.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import="java.sql.*" %> <%@ page import="java.sql.Date" %> <%@ page import="com.

JDBC详解(2)

12.4 listPagedPerson.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import="java.sql.*" %> <%@ page import="java.sql.Date" %> <%@ page import="c

JDBC 详解(1)

在以java application server应用为主的平台是,JDBC的最高级应用是DataSource的实现, 其它的,JDO,webcache,hibernate等不过是一种封装,所以看数据库应用的性能,主要看据库连结的利用率, 所以,DataSource可以说是J2EE最最重要的应用. 对于主流的数据库,如mysql,ms sqlserver,oracle,从其通用的性能来看,我建议在JAVA平台上应用oracle和mysql, ms sqlserver的数据库在JAVA平台上的性能

J2EE学习篇之--JDBC详解

今天我们来说一下关于JDBC的相关知识,关于JDBC我想大家都不陌生了,而且我记得早就开始使用它了,记得那是大二的时候做课程设计,但是那时候是为了完成任务,所以遇到问题就google,那时候也没有时间去整理,所以这次就来详细说一下关于JDBC的知识 摘要: JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API. J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.JDBC API.数据库驱动及数据库之间的关系

JDBC详解1

JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url背下来! 使用DriverManager类来得到Connection对象! ? ? ? 1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Ja

JDBC详解系列(二)之加载驱动

---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- ??在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection): 第三步:通过Connection,使用sql语句打开Statement对象: 第四步:执行语句,将结

JDBC详解(转)

原文链接:http://blog.csdn.net/cai_xingyun/article/details/41482835 什么是JDBC? Java语言访问数据库的一种规范,是一套API JDBC (JavaDatabase Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC规范采用接口和实现分离的思想设计了Jav