JDBC概览

1 篇文章 0 订阅

简介

  • JDBC是用Java语言操作关系型数据库的一套API。(Java DataBse Connectivity)
  • Java代码→JDBC【接口】→MySQL驱动(实现类jar包)/Oracle驱动/..
  • 理解:通过学习使用Java语言操作JDBC接口(规则),调用不同数据库所需的jar包,即实现类。

操作

 public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动(引入jdbc对于MySQL的实现类)
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接(将实现类/驱动和数据库相连接)
        //UTC表示恒定24小时制,serverTimezone时区配置
        String url="jdbc:mysql://127.0.0.1:3306/db01?serverTimezone=UTC";
        String username="root";
        String password="1234";
        Connection conn= DriverManager.getConnection(url,username,password);

        //3.定义sql
        String sql="update account set money=2000 where id=1 ";

        //4.获取执行sql的对象
        Statement st=conn.createStatement();

        //5.执行sql
        int count=st.executeUpdate(sql);

        //6.返回处理结果
        System.out.println(count);

        //7.释放资源
        st.close();
        conn.close();
    }

API详解

DriverManager

  1. 注册驱动【即可不写】
  2. 获取连接【本机代码简写:用"/"省略IP地址和端口号】
//1.注册驱动(引入jdbc对于MySQL的实现类)
//        Class.forName("com.mysql.cj.jdbc.Driver");

//2.获取连接(将实现类/驱动和数据库相连接)
         String url="jdbc:mysql:///db01?useSSL=false&serverTimezone=UTC";
         String username="root";
         String password="1234";
         Connection conn= DriverManager.getConnection(url,username,password);

Connection

  • 获取执行SQL的对象
  1. 普通执行SQL对象
  2. 预编译SQL的执行SQL对象:防止SQL注入
//普通执行SQL对象
Statement createStatement()
//预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
  •  事物管理
//开启事物
setAutoCommit(boolean autoCommit) //true为自动提交
//提交事务
commit();
//回滚事务
rollback();

Statement

  1. 执行SQL语句
  • 执行DML、DDL语句

        int executeUpdate(sql):执行DML、DDL语句

        返回值:(1)DML语句影响的MySQL表中的行数

                      (2)DDL语句执行后,执行成功也可能返回0

  • 执行DQL语句

        ResultSet executeQuery(sql):执行DQL语句

        返回值:ResultSet结果集对象

ResultSet

  1. 封装了DQL查询语句的结果
  2. 获取查询结果
public class JDBCDemo5_ResultSet {
    public static void main(String[] args) throws SQLException {
        //1.注册驱动

        //2.获取连接
        Connection c= DriverManager.getConnection("jdbc:mysql:///db01?serverTimezone=UTC","root","1234");

        //3.定义sql语句
        String sql="select * from account";

        //4.创建sql对象
        Statement s=c.createStatement();

        //5.执行sql
        ResultSet rs=s.executeQuery(sql);

        //6.创建集合存储Account的对象:即存储account表中的内容
        ArrayList<Account> list=new ArrayList<>();

        //7.处理结果,遍历rs中所有内容
        while(rs.next()){
            int id=rs.getInt(1);
            String name=rs.getString(2);
            double money=rs.getDouble(3);
            Account account=new Account(id,name,money);
            list.add(account);
        }
        System.out.println(list);
    }
}

PreparedStatement

  • 作用:预编译SQL语句并执行:预防SQL注入问题
  • SQL注入:通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的目的。【了解】
package com.wen.jdbc;

import java.sql.*;

public class JDBCDemo7_PreparedStatement {
    public static void main(String[] args) throws SQLException {
        //模拟用户登录时sql注入问题
        //1.注册驱动

        //2.获取连接
        Connection coon = DriverManager.getConnection("jdbc:mysql:///db01?serverTimezone=UTC", "root", "1234");

        //接收用户输入用户名和密码
        String name = "zhangsan";
        String pwd = "1234 ";

        //3.获取sql执行语句
        String sql = " select * from tb_user where username= ? and password=? ";

        //4.创建sql执行对象
        PreparedStatement ps = coon.prepareStatement(sql);

        //获取ps的值
        ps.setString(1,name);
        ps.setString(2,pwd);

        //5.执行sql
        ResultSet r = ps.executeQuery();

        //判断登录是否成功
        if (r.next()) {
            System.out.println("执行成功~");
        } else {
            System.out.println("执行失败~");
        }
        //7.释放资源
        r.close();
        ps.close();
        coon.close();
    }
}

数据库连接池

简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection);
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再进行重复创建;
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接遗漏
  • 好处:
  1. 资源重用
  2. 提升系统相应速度
  3. 避免数据库连接遗漏
  • 常用的数据库连接池:Driud
  • 使用步骤:
  1. 导入jar包
  2. 定义配置文件
  3. 加载配置文件 
  4. 获取数据库连接池对象
  5. 获取连接
//加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource=DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接
Connection connection=dataSource.getConnection();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不要熬夜的打工人!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值