JDBC基础-快速入门+各类作用

JDBC

概念

JDBC就是使用Java语言操作关系型数据库的一套API。通过JDBC的一套标准接口和各个数据库的实现类来用同一套Java代码,操作不同的关系型数据库。

请添加图片描述

请添加图片描述

简单的jdbc - demo

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Connection_01 {
    public static void main(String[] args) throws Exception {
        //1.MySQL5之后不需要写注册驱动
        //Class.forName("com.mysql.jdbc.Driver");
        //2.获取数据库连接对象conn
        String url = "jdbc:mysql://localhost:3306/db1?serverTimezone=UTC";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);
        //3.定义SQL语句
        String sql1 = "update emp set salary = 15000 where id = 1001";
        //4.获取执行SQL的对象stmt
        Statement stmt = conn.createStatement();
        //5.执行SQL
        int count1 = stmt.executeUpdate(sql1);
        //6.处理返回结果
        System.out.println(count1);
        //7.释放资源
        stmt.close();
        conn.close();
    }
}
  • url语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数
  • 例如jdbc:mysql://localhost:3306/db1(db1是我的一个数据库名称)
  • ?参数不指定的话可以省略,由于我的时区有多个,所以传了一个参数(?serverTimezone=UTC)指定时区
  • 如果连接的是本地mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为jdbc:mysql:///root

快速入门

0.创建工程,导入驱动jar包

1.注册驱动

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

2.获取连接

Connection conn = DriverManager.getConnection(url,usename,password);

3.定义SQL语句

String sql = "update...";

4.获取执行SQL对象

Statement stmt = conn.createStatement();

5.执行SQL

stmt.executeUpdate(sql);

6.处理返回结果

7.释放资源

stmt.close();
conn.close();

请添加图片描述

API详解

DriverManager(驱动管理类)

作用
1.注册驱动
2.获取数据库连接
  • 查询 API 可以看到
static Connection   getConnection(String url, String user, String password)
  • 参数

1.url:连接路径

语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
示例:jdbc:mysql://127.0.0.1:3306/db1
细节:
1.如果连接的是本机的mysql,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql://数据库名称?参数键值对
2.配置useSSL=false 参数,禁用安全连接方式,解决警告提示

2.user:用户名

3.password:密码

Connection

作用
1.获取执行SQL对象
  • 普通执行SQL对象(重点)
Statement createStatement()
  • 预编译SQL的执行SQL对象:防止SQL注入(重点)

    PreparedStatement prepareStatement(sql)
    
  • 执行存储过程的对象

2.管理事务
  • 使用try{}catch(){}管理事务
try {
            //开启事务
            conn.setAutoCommit(false);  //关闭自动填充来开启事务
            //5.执行SQL
            int count1 = stmt.executeUpdate(sql1);
            //6.处理返回结果
            System.out.println(count1);

            //异常
            int i = 3/0;
            int count2 = stmt.executeUpdate(sql2);
            System.out.println(count2);

            //提交事务
            conn.commit();
        } catch (Exception e) {
            //回滚事务
            conn.rollback();
            throw new RuntimeException(e);
        }

请添加图片描述
请添加图片描述

可以发现事务没有提交到数据库,第一条语句执行成功,但是由于有事务管理,回滚到之前的状态。

Statement

作用
1.执行SQL语句
int		executeUpdate(sql)	//执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet		executeQuery(sql)	//执行DQL语句  query查询
返回值:ResultSet 结果集对象

ResultSet(结果集对象)

作用

1.封装了DQL查询语句的结果

ResultSet	stmt.executeQuery(sql)	//执行DQL语句,返回ResultSet对象
  • 获取查询结果
boolean next()	//向下移动光标,并判断当前行是否为有效行
返回值:
	true:有效行,当前行有数据
	false:无效行,当前行没有数据
xxx getXxx(参数)	//获取数据
xxx:数据类型,如int getInt(参数); String getString(参数)
参数:
	int:列的编号,从1开始,从左到右
	String:列的名称
实例

查询account账户表数据,封装到Account对象中,并存储到ArrayList集合中

请添加图片描述

PreparedStatement

作用

预编译SQL并执行SQL语句

步骤
  • 获取PreparedStatement对象
//SQL语句中的参数值用?占位符替代
String sql = "select * from user where username = ? and password = ?";

//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
  • 设置参数值
PreparedStatement对象:setXxx(参数1,参数2)		给?赋值
Xxx:数据类型;如setInt(参数1,参数2)
参数1:?的位置编号,从1开始
参数2:?的值
  • 执行SQL
executeUpdate();|executeQuery();	不需要再传递sql
原理
好处
  1. 通过预编译SQL,提高性能
  2. 将敏感字符进行转义来防止SQL注入

预编译功能开启:useServerPrepStmts=true 写在url之后

String url = "jdbc:mysql://127.0.0.1:3306/db1?useServerPrepStmts=true"

数据库连接池

背景(需求)

数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。

原理

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。 [1]

请添加图片描述

好处

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fantasy`

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

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

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

打赏作者

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

抵扣说明:

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

余额充值