zoukankan      html  css  js  c++  java
  • 基础知识:JDBC

    JDBC的工作原理

       

    JDBC是一种执行SQLJava API,可以为多种数据库提供统一访问

       

    JDBC由两部分组成,一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI,也就是驱动程序

       

    JDBC采用驱动模式的设计(什么是驱动模式?)

       

    JDBC操作数据库的编程步骤

       

    1、注册驱动程序,也就是将驱动程序加载到Java虚拟机中,这里的驱动程序也就是数据库厂商提供的驱动程序,加载到Java虚拟机中之后,驱动管理器DriverManager才能够找到该驱动程序,一般通过Class.forName("驱动程序的完整类名")

    2、获取数据库的连接,通过DriverManagergetConnection得到一个与数据库的连接对象,这个对象时一个Connection接口,该接口在java.sql包下,getConnection方法需要提供连接的URL,用户名,密码等参数

    3、创建与数据库的会话,这个会话对象是通过连接对象ConnectioncreateStatement方法得到的,会话对象是一个Statement,但常用的是PreparedStatement,这是一个预编译的会话,相当于告诉了数据库即将执行的SQL语句,如果SQL语句中包含了未知参数可以用占位符?进行替代,然后只需要传递参数即可,效率更高一些,另外使用占位符可以很好的避免SQL注入的攻击

    4、在得到会话之后,就可以执行SQL语句了,执行SQL语句是利用会话的executeQueryexecuteUpdate两个方法来完成的,前者返回一个查询集,后者返回一个影响的行数,查询的结果是一个查询集ResultSet

    5、处理结果集,利用ResultSetnext方法遍历查询集

    6、关闭连接

       

       

    指定结果集ResultSet可滚动

       

    在创建Statement或者PreparedStatement时传入type参数

       

    Statement stmt=conn.creatStatement(sql,type,concurrency);

    PreparedStatement pstmt=conn.PreparedStatement(sql,type,concurrency);

       

    type的三种参数类型

       

    TYPE_FORWARD_ONLY:不可滚动

    TYPE_SCROLL_INSENSITIVE:数据库查询引起的变化对结果集不影响

    TYPE_SCROLL_SENSITIVE:数据库的变化也会影响结果集

       

    concurrency用于指定是否为可更新的结果集,意思就是说在查询出来的结果集中修改数据会同步到数据库

       

    concurrency的三种参数类型

       

    CONCUR_READ_ONLY:结果集不能用于更新数据库

    CONCUR_UPDATABLE:结果集可以用于更新数据库

       

    JDBC操作事务

       

    JDBC的事务要满足四个特性,也就是经常说的ACID

       

    所谓的A,是指atomicity,即原子性,它要求事务中逻辑单元对数据的操作要么全部执行,要么全部不执行

    所谓的C,是指consistency,即一致性,它要求事务完成时,所有的数据都必须保持一致状态

    所谓的I,是指isolation,即隔离性,它要求并发事务之间对数据的修改不能同时进行,比如AB同时给C转账,那么AB的转账操作不能同时对C的余额进行修改,也就是说要么A先对C的余额进行操作了之后B才对C的余额进行操作

    所谓的D,是指durability,即持久性,它要求事务完成之后,对系统的影响是永久性的

       

    事务的结束只能有两种方式:提交和回滚

       

    默认情况下,JDBC使用自动提交事务的方式,但是多数情况下需要控制事务的过程,如果发生异常,希望能够回滚事务,那么我们就需要关闭自动提交事务,然后自己控制事务的提交,在没有异常的时候提交,而出现异常,在异常的catch中回滚

       

    try{

    conn.setAutoCommit(false);

    stmt=conn.creatStatement();

    stmt.executeUpdate("sql命令");

    conn.commit();

    }catch(Exception e){

    e.printStackTrace();

    conn.rollback();

    }

       

    使用连接池技术

       

    JDBC提供的连接方式不同,数据库连接池的方式获取连接需要使用数据源的形式来获取连接,而传统的JDBC是通过驱动管理器来获取

       

    主要代码如下:

    InitialContext cxt=new InitialContext();

    DataSource ds=(DataSource)cxt.lookup("数据源在JNDI上的路径");

    Connection conn=ds.getConnection();

       

    连接池的技术解决了重复创建连接,基本上池的技术都是为了解决重复创建连接

       

    JDBC获得Oracle数据库连接

       

    通过JDBC获得Oracle数据库连接有三种方式,一种是OCI,一种是Thin,另一种是ODBC的方式,下面对这三种方式进行一下说明

       

    OCI方式依赖本地的动态链接库,如果在本地安装了Oracle数据库客户端,可以采用这种方式

    Thin方式为纯Java的数据库连接方式

    ODBC不太常用

       

    Thin方式连接Oracle数据库

       

    jdbc:oracle:thin:@<server>[:<1521>]:<database_name>

  • 相关阅读:
    RegExp
    svn操作
    前端跨域请求
    UML
    excel 常用设置
    python中 cmp
    python global nonlocal
    python常见异常提示
    table边框和td的width失效
    display_css
  • 原文地址:https://www.cnblogs.com/keedor/p/4501765.html
Copyright © 2011-2022 走看看