JDBC概述、详解、预编译机制、批处理机制及JDBC连接池

本文详细介绍了JDBC的概念,包括数据库驱动、JDBC的作用和相关包。接着讲解了JDBC的基础操作,如注册驱动、获取连接、使用Statement和ResultSet。重点探讨了JDBC的预编译机制,如何防止SQL注入,以及PreparedStatement的优势。批处理机制的两种实现方式(Statement和PreparedStatement)及其特点也进行了阐述。最后,文章讨论了JDBC连接池的重要性,以C3P0为例说明其配置和优点。
摘要由CSDN通过智能技术生成

一、JDBC概述

  1. 数据库驱动
    所谓数据库驱动就是数据库厂商提供连接数据库的jar包。
    开发人员只需要导入数据库驱动包就可以通过该驱动包提供的api来接并操作数据库。
    不同的数据库的驱动包互不兼容,需要操作什么数据库就要导入该数据库的驱动包。
  2. JDBC
    由于不同的数据库厂商提供的数据库驱动各不相同,在使用不同数据库时需要学习对应数据库驱动的api,对于开发人员来说学习成本十分的高。
    于是sun提供了JDBC的规范,本质上一大堆的接口,要求不同的数据库厂商提供的驱动都实现这套接口,这样以来开发人员只需要学会JDBC这套接口,所有的数据库驱动作为这套接口的实现,就都会使用了。
  3. JDBC相关包
    JDBC主要是由 java.sql 和javax.sql包组成的,这两个包已经被集成到J2SE的规范中了,这意味着,只要一个普通的java程序就可以使用JDBC。
    要注意的是,在开发数据库程序时,除了如上的两个包,还需要手动的导入具体的数据库驱动。

在这里插入图片描述

二、JDBC详解

  1. 入门案例

a.准备

create database mydb4;
use mydb4;
create table user(
id int primary key auto_increment,
name varchar(20),
age int,
addr varchar(20)
);
insert into user values (null,'aaa',19,'bj');
insert into user values (null,'bbb',29,'sh');
insert into user values (null,'ccc',32,'gz');
insert into user values (null,'ddd',24,'sz');
insert into user values (null,'eee',26,'tl');

b.导入数据库驱动包

在这里插入图片描述

c.代码实现

@Test
public void test01() throws SQLException {
    //1.注册数据库驱动
    DriverManager.registerDriver(new Driver());
    //2.获取数据库连接
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb4","root","root");
    //3.获取传输器
    Statement stat = conn.createStatement();
    //4.执行sql获取结果集
    ResultSet rs = stat.executeQuery("select * from user");
    //5.遍历结果集获取数据
    while(rs.next()){
        String name = rs.getString("name");
        int age = rs.getInt("age");
        System.out.println(name+"~"+age);
    }
    //6.关闭资源
    rs.close();
    stat.close();
    conn.close();
}
  1. JDBC细节
    a.注册数据库驱动
    数据库驱动包会自动在类加载时注册驱动
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

所以不要手动注册数据库驱动,会造成驱动的重复注册

DriverManager.registerDriver(new Driver());

改为使用类加载方式注册

Class.forName("com.mysql.jdbc.Driver");

b.获取数据库连接
获取数据库连接时要通过数据库地址指定要连接的数据库位置
不同的数据库地址的写法是不同的

MySql jdbc:mysql://localhost:3306/sid?xxx=xx
Oracle jdbc:oracle:thin:@localhost:1521:sid
SqlServer jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid

MySql数据库地址,如果不指定主机名默认连接localhost
MySql数据库地址,如果不指定端口号默认连接3306
所以如果连接的是本机默认端口,可以将地址写为如下样式:

jdbc:mysql:///sid

c.Connection对象

createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql): 创建向数据库发送预编译sql的PreparedSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。 
setAutoCommit(boolean autoCommit):设置事务是否自动提交。 
commit():在链接上提交事务。
rollback():在此链接上回滚事务。

d.Statement对象

executeQuery(String sql) : 用于向数据库发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql): 用于向数据库发送任意sql语句
addBatch(String sql): 把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。 

e.ResultSet对象
ResultSet对象内部以类似表的结构存储了查询结果信息
并提供了一个游标用来遍历数据
游标最开始不指向任何数据
通过相关方法可以移动游标,如果成功移动并指向了一条新的数据就返回true,否则返回false
当指向新数据时,可以通过api获取当前指向的行中指定列的数据

getObject(int index)
getObject(string columnName)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张艳霞zhangyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值