• JDBC数据库连接技术


    【学习笔记】JDBC数据库连接技术(Java Database Connectivity)

    一、JDBC简介

      Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称。它可以把数据持久保存,是一种持久化机制。

      1.持久化

        持久化就是将程序中的数据在瞬时状态和持久状态间转换的机制。

      2.JDBC API

        Connection连接接口

        Statement接口

        ResultSet结果集接口

        PerparedStatement接口

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

        SUN公司提供,它是JDBC体系结构的支柱,负责管理各种不同的驱动(java.sql包)

      4.JDBC驱动

        JDBC驱动由各个数据库厂商或第三方中间件厂商提供,负责连接各种不同的数据库。

        在开发Java应用程序时,我们只需要正确加载JDBC驱动,正确调用JDBC API,就可以进行数据库访问。

    二、JDBC API

      1.JDBC API主要做三件事:与数据库建立连接、发送SQL语句、处理结果。

        DriverManager类:装载驱动程序,并为创建新的数据库连接提供支持。

        Connection类:负责连接数据库并担任传输数据的任务。

        Statement类:由Connection类产生,负责执行SQL语句。

        ResultSet类:负责保存和处理Statement执行后所产生的结果。

        PreparedStatement类:Statement的子接口,具有高安全性、高性能、高可读性和高可维护性的优点。

    三、JDBC访问数据库的步骤

      1.加载JDBC驱动

        使用Class.forName()方法将给定的JDBC驱动类加载到Java虚拟机。若系统中不存在给定的类,则会引发ClassNotFoundException异常。

      2.与数据库建立连接

        DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。当调用getConnection()方法时,DriverManager类首先从已加载的驱动程序列表中找到一个可以接收该数据库URL的驱动程序,然后使用相关数据连接到数据库,创建连接对象并返回引用。

      3.发送SOL语句,并得到返回结果

        一旦建立连接,就使用该链接创建Statement接口的对象,并将语句传递给它所连接的数据库:查询操作返回类型为ResultSet的结果集。

      4.处理返回结果

        结果集:

        while(rs.next()){

          int id = rs.gitInt("id");

          String name = rs.getString("name");

          System.out.println(id+" "+name);

        }

    四、两种常见的驱动方式

      1.JDBC-ODBC桥连方式(驱动类:“sun.jdbc.odbc.JdbcOdbcDriver”数据库连接字符串以“jdbc:odbc:”开始,后面跟随数据源名称)

        下载ODBC驱动

        配置ODBC数据源

      2.使用纯Java方式连接数据库

        常见的错误有以下几类:

        JDBC驱动类的名称书写错误,出现ClassNotFoundException异常;

        数据库连接字符串,数据库用户名、密码书写错误,出现SQLException异常;

        数据库操作结束后,没有关闭数据库连接,导致仍旧占有系统资源。

        关闭数据库连接的语句没有放到finally语句中,导致语句可能没有被执行。

      3.在实际项目开发中,为了避免可能出现的乱码问题,将制定数据库连接的编码集为utf-8,URL连接:

        url = jdbc:mysql://126.0.0.1:3306/epet?useUnicode=true&characterEncoding=utf-8;

    五、Statement,ResultSet,PreparedStatement类方法

      1.Connection接口常用方法

        close();立即释放此对象的数据库和JDBC资源

        Statement createStatement();创建一个对象来将SQL语句发送到数据库

        PreparedStatement prepareStatement(String sql);创建一个对象将参数化的sql语句发送到数据库

        boolean isClosed()查询对象是否关闭

      2.Statement接口方法

        ResultSet executeQuery(String sql);执行sql查询并获取ResultSet对象

        int executeUpdate(String sql);可以执行插入,删除,更新操作

        boolean execute(String sql);执行任意SQL语句,若结果为ResultSet对象,返回true;若为更新计数或者不存在结果,则返回false;

      3.ResultSet接口方法

        boolean next();下一行

        boolean previous();上一行

        void close();关闭ResultSet对象

        int/float/String getxxx(int/String columnIndex);以xxx形式获取结果集指定列好的值

        int getRow();当前的行号

        boolean adsolute(int row);光标移动到指定的行

      4.PreparedStatement接口方法

        boolean execute();在此对象执行SQL语句,结果是ResultSet对象返回true,其它返回false

        ResultSet executeQuery();返回结果集

        int executeUpdate();执行SQL语句(DML语句insert,update,delete;或者无返回内容的DDL语句),返回值是该操作所影响的行数

        void setInt(int index,int x);

        void setFloat(int index,float x);

        void setDouble(int index,double x);将制定参数设置为给定的Java int值.

        void setObject(int index,Object x);使用给定对象设置指定参数的值

    六、使用PreparedStatement操作数据库的基本步骤

      1.创建PreparedStatement对象

        PreparedStatement pstmt = con.preparedStatement("update dog Set health=?,love=? where id=?");

        SQL语句具有一个或多个输入参数:这些输入参数的值在SQL语句创建时未被指定,而是每个输入参数使用占位符?替代

      2.设置每个输入参数的值

        调用setxxx()方法

      3.执行SQL语句

        在设置完参数后,就可以调用PreparedStatement接口的执行方法来执行SQL语句

        [ResultSet executeQuery(),int executeUpdate(),boolean execute()]

    七、PreparedStatement比Statement好在哪里

      1.提高了代码的可读性和可维护性。避免了繁琐麻烦又容易出错的拼接。

      2.提高了SQL语句执行的性能。

        创建Statement对象时不使用SQL语句做参数,不会解析和编译SQL语句,每次调用方法执行SQL语句时都要进行解析和编译操作(操作相同)

        创建PreparedStatement对象时使用SQL语句做参数,会解析和编译语句。也可以使用带占位符的SQL语句作为参数,在通过setxxx()方法赋值后执行SQL语句无需再次解析和编译,直接执行即可。多次执行相同操作可以大大提高性能。

      3.提高了安全性。

        使用预编译语句,传入的任何参数都不会和已经预编译的sql语句进行拼接,避免了SQL注入攻击。

  • 相关阅读:
    .NET开发者必备的工具箱
    LINQ标准查询操作符详解(转)
    转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)
    构建高并发高可用的电商平台架构实践(转)
    使用UI Automation实现自动化测试 --微软提供的控件Pattern
    使用UI Automation实现自动化测试 --工具使用
    [archlinux][daily] 自建DNS服务器 / 建立本地DNS cache / 使用dnsmasq加速上网
    [skill] 补码
    nfs的时间问题,影响编译
    [daily][CentOS][SELinux]用key免登陆不成功,原来是SElinux在搞事情
  • 原文地址:https://www.cnblogs.com/fqwsndc1314-5207788/p/7275046.html
Copyright © 2020-2023  润新知