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

一、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 column
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用JDBC开启预编译代码时,可以按照以下步骤进行操作: 1. 创建一个`PreparedStatement`对象,而不是`Statement`对象。预编译语句是通过`PreparedStatement`接口来执行的,它是`Statement`接口的子接口。 2. 使用`Connection`对象的`prepareStatement()`方法来创建`PreparedStatement`对象。在调用该方法时,需要传入一个包含占位符的SQL语句作为参数。占位符通常使用问号(?)表示。 3. 在创建`PreparedStatement`对象之后,可以使用`setXxx()`系列方法为每个占位符设置相应的值。其中,`setXxx()`方法的参数类型与占位符所代表的数据类型相对应。 4. 使用`executeUpdate()`或`executeQuery()`方法执行预编译语句。在执行过程中,JDBC会将占位符替换为实际的参数值,并将最终的SQL语句发送给数据库执行。 下面是一个简单的示例代码,演示了如何使用JDBC开启预编译代码: ```java import java.sql.*; public class PreparedStatementExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String username = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, username, password)) { String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setInt(2, 25); int rowsAffected = pstmt.executeUpdate(); System.out.println("Rows affected: " + rowsAffected); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上述示例中,我们使用了`PreparedStatement`来执行插入操作。通过调用`setString()`和`setInt()`方法,我们为两个占位符设置了相应的值。然后,使用`executeUpdate()`方法执行预编译语句并获取受影响的行数。 请注意,上述示例仅用于演示目的。实际应用中,你需要根据自己的数据库和表结构进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张艳霞zhangyx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值