`

Java tutorial中JDBC一节的读书笔记

阅读更多

* JDBC 架构

    JDBC支持两层和三层架构

        * 两层架构
            应用->JDBC->数据库

        * 三层架构
            Java appletor/Html浏览器->应用服务器/JDBC->数据库

        * 三层架构的好处
            性能、安全、多线程、鲁棒性等

    JDBC包括四个组建
        * JDBC API
        * JDBC 驱动管理器
        * JDBC 测试套件
        * JDBC-ODBC桥

* 创建/获取连接

    * JDBC的四种驱动类型

        * Type 1
            实现了JDBC API到其他的数据存取API(比如ODBC)的映射,这种驱动一般依赖于本地类库。可移植性不好。
        * Type 2
            部分使用Java语言实现部分使用本地代码实现的驱动,这种驱动使用了所连接数据库的原生的客户类库,
            因此也依赖于本地类库, 可移植性不好。
        * Type 3
            驱动使用纯Java客户端与中间服务器进行连接,连接使用与数据库无关的协议。
        * Type 4
            驱动使用纯Java客户端直接与数据库进行连接,与数据库相关的网络连接协议使用Java实现。

    * 两层架构:

        1. 载入驱动
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        2. 建立连接
            String url = "jdbc:derby:Fred";//包括数据库地址、和待连接数据库名
            Connection con = DriverManager.getConnection(url, "Fernanda", "J8");//使用特定用户名和密码进行连接

    * 三层架构:

         //初始化上下文环境
         InitialContext ic = new InitialContext()
         //查找数据源
         DataSource ds = ic.lookup("java:comp/env/jdbc/myDB");
         //取得连接,这里的连接一般是从应用服务器的连接池当中取得
         Connection con = ds.getConnection();

         //手动创建数据源
         DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource()
         ds.setPort(1527);
         ds.setHost("localhost");
         ds.setUser("APP")
         ds.setPassword("APP");
        
         //获得连接,连接仍然是由外部(应用服务器)管理器进行管理
         Connection con = ds.getConnection();

    * 使用Ant执行创建数据库的任务

         # Database properties are in derby.properties
         db.delimiter=;
         db.root=${javaee.home}/derby
         db.driver=org.apache.derby.jdbc.ClientDriver
         db.datasource=org.apache.derby.jdbc.ClientDataSource
         db.host=localhost
         db.port=1527
         db.sid=sun-appserv-samples
         db.url=jdbc:derby://${db.host}:${db.port}/${db.sid};create=true;
         db.user=APP
         db.pwd=APP

         <target name="create-db_common" depends="init,start-db,delete-db"
                       description="Create database tables and populate database.">
            <sql driver="${db.driver}" url="${db.url}" userid="${db.user}"
                 password="${db.password}" classpathref="db.classpath"
                         delimiter="${db.delimiter}" autocommit="false" onerror="abort">
                 <transaction src="
                          {javaee.tutorial.home}/examples/common/sql/${db.vendor}/tutorial.sql"/>
             </sql>
         </target>


* 从结果集取得结果

    * 初始化Statement:

        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                             ResultSet.CONCUR_READ_ONLY);

            1. TYPE_FORWARD_ONLY :结果集的游标只能向前,无法进行滚动
            2. TYPE_SCROLL_INSENSITIVE: 结果集的游标可以向前、向后滚动或者移动到绝对位置
            3. TYPE_SCROLL_SENSITIVE:  结果集的游标可以向前、向后滚动或者移动到绝对位置

            1. CONCUR_READ_ONLY 表示结果集是只读类型的
            2. CONCUR_UPDATABLE 表示结果集是支持更新的

        如果不指定这两个参数,那么取得的Statement是 TYPE_FORWARD_ONLY 和 CONCUR_READ_ONLY的
   
    * 获取结果集

        ResultSet srs = stmt.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES");

        * 移动游标的方法:
            next(), previous(), first(), last(), beforeFirst(), afterLast(),
            relative(int rows), absolute(int row)

        * 获取数据的方法:
            使用getXXX()方法,其参数可以为字段名或者整数下标,使用整数下标效率更高。

        * 更新数据的方式:
            使用updateXXX()方法,其参数为
                1. 待更新的字段名或者下标
                2. 待更新的值
            其返回值为更新成功的行数
            1. 在更新数据以后,必须调用结果集的updateRow()方法来将更新从结果集写入数据库。
            如果在调用updateRow()之前,将游标移动到了其他行,那对于当前行的更新将被丢失!
            2. 使用cancelRowUpdates()方法来取消对某行所有字段的更新。

* 使用preparedStatement.

    PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
    updateSales.setInt(1, 75);
    updateSales.setString(2, "Colombian");
    updateSales.executeUpdate():

    * 预编译的Statement的好处
        1. 可以在一个循环当中被重复调用
        2. SQL语句被先送给数据库进行预编译,提高了执行性能

    * executeUpdate()的返回值
        返回被更新的行数,如果返回0,可能是
            1. 该更新确实更新了0行
            2. 执行的语句是一个DDL语句

* 使用join

* 使用事务

    * 禁止Auto-commit模式
        con.setAutoCommit(false);

    * 提交事务

            con.setAutoCommit(false);//将自动提交设置为false
            try {
                .....//更新数据库语句
                con.commit();//提交到数据库
            } catch (SQLException e){
                con.rollback();//回滚事务
            } finally {
                con.setAutoCommit(true);// 记住在事务结束后,要将自动提交设置为true
            }

    * Savepoint: 回滚标签点
        Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1");//创建一个回滚标签点
        rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (?SECOND?)");
        ...
        conn.rollback(svpt1);// 回滚到保存的标签点

    * 释放回滚标签点
        回滚标签点在事务被提交或者回滚后被自动释放。

* 使用存储过程
    * 创建存储过程的方法与执行其他DDL语句一样

    * 使用 CallableStatement来调用存储过程
        CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
        ResultSet rs = cs.executeQuery();

        对于产生结果的query过程, 使用executeQuery来执行, 对于更新或者DDL语句,
        使用executeUpdate来执行, 存储过程可能含有多个SQL语句并返回多个结果集,
        需要使用execute方法来执行。CallableStatement对象可以有输入/输出参数。

 

分享到:
评论

相关推荐

    Java 8 简明教程 (Java 8 Tutorial中文版)文字pdf版

    Java 8 简明教程 Java 8 Tutorial中文版 “Java并没有没落,人们很快就会发现这一点” 欢迎阅读我编写的Java 8介绍。本教程将带领你一步一步地认识这门语言的新特 性。通过简单明了的代码示例,你将会学习到如何使用...

    The Java Tutorial 英文版

    在《Java Tutorial》中,你会找到关于这些基础知识的清晰解释和实例。 接下来,`tutorial.chm`文件很可能是该教程的主文档,它以Windows帮助文件格式提供。这种文件通常包含丰富的文本、代码示例和索引,方便用户...

    java tutorial

    java tutorialjava tutorial.chm

    Java Tutorial(卷5) 最好的JAVA教材

    SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...

    Java Tutorial

    集合框架是Java中处理数据集合的关键部分,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)等接口及其实现类。 7. **输入/输出(I/O)** Java提供了强大的I/O流系统...

    Java Tutorial (Java 教程)

    ### Java 教程知识点概述 #### 一、Java 概述 - **定义与起源**:Java 是一...无论是初学者还是经验丰富的开发者,都能在 Java 中找到适合自己的学习和发展路径。希望本教程能为你开启 Java 学习之旅提供有益的帮助。

    Java Tutorial(卷2) 最好的JAVA教材

    SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...

    The Java Tutorial Fourth Edition

    《Java教程第四版》是Sun Microsystems(现已被Oracle公司收购)官方发布的一本入门级Java编程教程,旨在为初学者提供全面而扎实的Java基础知识。这本书涵盖了Java语言的核心概念、语法以及开发工具的使用,是Java...

    Java Tutorial(For SDK1.6, EN)_P2

    Java Tutorial Java官方教程。

    java Tutorial

    Addison.Wesley.The.Java.Tutorial

    Java Tutorial(卷1) 最好的JAVA教材

    SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...

    java tutorial 免费下载

    https://pan.baidu.com/s/1cdAlN8bBUcObXqzd5VoGng 提取码:ahk7 复制这段内容后打开百度网盘手机App,操作更方便哦

    The_Java_Tutorial.rar_The java tutorial_java Tutorial

    《Java教程》是一款深受开发者喜爱的Java学习资源,它提供了全面且深入的Java编程知识,旨在帮助初学者和有经验的程序员掌握Java语言的核心概念和技术。这个教程以其清晰的结构和丰富的实例闻名,使得学习过程既有趣...

    Java Tutorial(卷4) 最好的JAVA教程

    SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...

    The Java Tutorial

    JDK文档里说的那个《The Java Tutorial》(html格式)。 里面都是例子,相当于JDK文档的补充。每个内容都有相应的applet示例或者java web start示例演示。 从index.html开始浏览,点击其页面右上角的“Table of ...

Global site tag (gtag.js) - Google Analytics