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+"\t"+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注入攻击。

时间: 2024-10-23 08:15:06

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 JDBC 数据库连接池

1.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 进行sql操作 断开数据库连接 这种模式开发,存在的问题: 普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s-1s的时间).需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接.这样的方式将会消耗大量的资

在JAVA中实现JDBC数据库连接池

[转自e良师益友网]Java程序员都很羡慕Windows ADO ,只需要new Connection 就可以直接从数据库连接池中返回Connection.并且 ADO Connection 是线程安全的,多个线程可以共用一个Connection,所以ASP程序一般都把getConnection 放在 Global.asa 文件中,在 IIS 启动时建立数据库连接.ADO 的Connection 和Result 都有很好的缓冲,并且很容易使用.推荐学习尚硅谷JDBC视频教程. 其实我们可以自己写

Java之中JDBC数据库连接池实现方法

作为一名初级Java程序员都很羡慕Windows ADO ,只需要new Connection 就可以直接从数据库连接池中返回Connection.并且 ADO Connection 是线程安全的,多个线程可以共用一个Connection,所以ASP程序一般都把getConnection 放在 Global.asa 文件中,在 IIS 启动时建立数据库连接.ADO 的Connection 和Result 都有很好的缓冲,并且很容易使用. 其实我们可以自己写一个JDBC数据库连接池. 写JDBC

jdbc数据库连接之jdbcUtils工具类抽取

JDBC数据库连接1.准备数据库 初始化数据库和表:        CREATE DATABASE day07;        USE day07;                    create table category(            cid varchar(20) primary key,            cname varchar(20)        );                insert into category values('c001','电器'

【Java123】JDBC数据库连接池建立

需求场景:多SQL任务多线程并行执行 解决方案:建立JDBC数据库连接池,将线程与连接一对一绑定 https://www.cnblogs.com/panxuejun/p/5920845.html https://blog.csdn.net/sunbo94/article/details/79409298 https://www.cnblogs.com/hanfight/p/4701763.html 需求场景:单次查询的ResultSet数据量过大 解决方案:分页查询+多线程任务执行 https:

JDBC数据库连接池技术

在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管理Connection,这样可以重复使用Connection.有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象.当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池.连接池就可以继续保

java攻城狮之路--复习JDBC(数据库连接池 : C3P0、DBCP)

复习数据库连接池 : C3P0.DBCP 1.数据库连接池技术的优点: •资源重用: 由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销.在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性. •更快的系统反应速度: 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用.此时连接的初始化工作均已完成.对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间. •新的资源分配手段: 对于多应用共享同

JDBC数据库连接

工程: JDBC (Java DataBase Connectivity) Java数据库连接: JDBC组成:①java.sql包中:②对应数据厂商提供 JDBC的使用步骤: 一.:连接数据库:①加载驱动:(利用反射把驱动加载进虚拟机,静态代码块就是在加载驱动)②获取连接对象:url=jdb:mysql://host:port/database_name; 二:创建语句状态对象: 三:执行SQL语言: 四:释放资源. 下面来一个测试类: public class JDBC_tree {  @T