JAVA基础 JDBC

JDBC

基本概念:

什么是JDBC?

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

为什么要有JDBC?

统一标准!!!
我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。
注意到JDBC接口是Java标准库自带的,所以可以直接编译,而具体的JDBC驱动是由数据库厂商提供的,例如,MySQL的JDBC驱动由Oracle提供。
因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动:

┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐

│  ┌───────────────┐  │
   │   Java App    │
│  └───────────────┘  │
           │
│          ▼          │
   ┌───────────────┐
│  │JDBC Interface │<─┼─── JDK
   └───────────────┘
│          │          │
           ▼
│  ┌───────────────┐  │
   │  JDBC Driver  │<───── Vendor
│  └───────────────┘  │
           │
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘
           ▼
   ┌───────────────┐
   │   Database    │
   └───────────────┘

数据库连接,java语言操作数据库定义了操作所有关系型数据库的规则(接口)
从代码来看,Java标准库自带的JDBC接口其实就是定义了一组接口,而某个具体的JDBC驱动其实就是实现了这些接口的类:

┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐

│  ┌───────────────┐  │
   │   Java App    │
│  └───────────────┘  │
           │
│          ▼          │
   ┌───────────────┐
│  │JDBC Interface │<─┼─── JDK
   └───────────────┘
│          │          │
           ▼
│  ┌───────────────┐  │
   │ MySQL Driver  │<───── Oracle
│  └───────────────┘  │
           │
└ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ┘
           ▼
   ┌───────────────┐

使用JDBC的好处是:

各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;

Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;

可随时替换底层数据库,访问数据库的Java代码基本不变。

功能:

JDBC连接

Connection代表一个JDBC连接,它相当于Java程序到数据库的连接(通常是TCP连接)。

打开一个Connection时,需要准备URL、用户名和口令,才能成功连接到数据库。
URL是由数据库厂商指定的格式,例如,MySQL的URL是:

jdbc:mysql://<hostname>:<port>/<db>?key1=value1&key2=value2

假设数据库运行在本机localhost,端口使用标准的3306,数据库名称是learnjdbc,那么URL如下:

jdbc:mysql://localhost:3306/learnjdbc?useSSL=false&characterEncoding=utf8

JDBC事物

数据库事务(Transaction)具有ACID特性:

Atomicity:原子性
Consistency:一致性
Isolation:隔离性
Durability:持久性

JDBC提供了事务的支持,使用Connection可以开启、提交或回滚事务。

要在JDBC中执行事务,本质上就是如何把多条SQL包裹在一个数据库事务中执行。我们来看JDBC的事务代码:

Connection conn = openConnection();
try {
    // 关闭自动提交:
    conn.setAutoCommit(false);
    // 执行多条SQL语句:
    insert(); update(); delete();
    // 提交事务:
    conn.commit();
} catch (SQLException e) {
    // 回滚事务:
    conn.rollback();
} finally {
    conn.setAutoCommit(true);
    conn.close();
}

连接池

数据库连接池是一种复用Connection的组件,它可以避免反复创建新连接,提高JDBC代码的运行效率;
可以配置连接池的详细参数并监控连接池。

JDBC连接池有一个标准的接口javax.sql.DataSource,注意这个类位于Java标准库中,但仅仅是接口。要使用JDBC连接池,我们必须选择一个JDBC连接池的实现。常用的JDBC连接池有:

HikariCP
C3P0
BoneCP
Druid

目前使用最广泛的是HikariCP。

//初始化连接池
        HikariConfig config = new HikariConfig();
        MySQLConfig usr = null;
        try {
            InputStreamReader is = new InputStreamReader(new FileInputStream("src/database/config.json"));
            char[] buf = new char[1024 * 1024];
            int len;
            try {
                len = is.read(buf);
                //将json配置文件数据 转换成 String
                String json = new String(buf, 0, len);
                //实例化
                usr = JSON.parseObject(json, MySQLConfig.class);
            } catch (IOException e) {
                Log.debug("读取数据库配置文件失败...");
                System.exit(1);
            }
        } catch (FileNotFoundException e) {
            Log.debug("数据库配置文件config.json丢失");
            System.exit(1);
        }
        config.setJdbcUrl(usr.getUrl());
        config.setUsername(usr.getName());
        config.setPassword(usr.getPsw());
        config.addDataSourceProperty("connectionTimeout", "1000");//连接超时:1秒
        config.addDataSourceProperty("idleTimeout", "60000");//空闲超时:60秒
        config.addDataSourceProperty("maximumPoolSize", "200");//最大连接数:200
        pool = new HikariDataSource(config);
        Log.info("MySQL连接池启动成功");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值