javaweb-JDBC部分

简介介绍

JDBC是一个在JAVA 里使用SQL语句来操作关系系数据库的API

通过定义 一套规范的接口来使得程序员可以方便的操作不同的关系型数据库

(是得JDBC只是接口 由各个公司来进行实际类的实现 这就是驱动)

快速入门

代码演示

// JDBC的快速入门
public class JDBCdemo {

    public static void main(String[] args) throws Exception {
        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        /*
        获取连接
        URL
        UserName
        Password
         */
        String URL = "jdbc:mysql://127.0.0.1:3306/db1";
        String UserName = "";
        String PassWord = "";
        Connection conn = DriverManager.getConnection(URL, UserName, PassWord);

        // 定义sql语句
        String sql = "UPDATE account set money=20000 where id=1";

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

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

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

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

Class.forname()是获取字节文件放射 想要了解可以看文章-放射知识学习

DriverManager 解析

在这里插入图片描述
先上一份官方文档
在这里插入图片描述
其中最重要的两个方法分别是

  1. getConnection() 获取连接
  2. registerDriver() 注册驱动
    (在我们的快速入门代码里貌似是没有注册驱动
    但是在我们反射加载Driver中Mysql有给我们书写静态代码)
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!");
        }
    }
}

帮助我们注册驱动
在这里插入图片描述
连接的参数返回的是一个连接

useSSL=false 是简化连接

Connection解析

在这里插入图片描述
首先依旧是官方关于Connection api的介绍
在这里插入图片描述
首先获取执行SQL的对象
在这里插入图片描述

Connection conn = DriverManager.getConnection(URL, UserName, PassWord);
// 获取执行sql的对象
Statement stmt = conn.createStatement();

在这里插入图片描述

对事务的处理, 与mysql的事务 处理非常的对齐

try {
            // 启动事务
            conn.setAutoCommit(false);

            // 执行sql
            int count1 =  stmt.executeUpdate(sql1);
            // 处理结果
            System.out.println(count1);
            // 执行sql
            int count2 =  stmt.executeUpdate(sql2);
            // 处理结果
            System.out.println(count2);
            // 提交事务
            conn.commit();
        } catch (Exception e) {
            // 我问题回滚事务
            conn.rollback();
            throw new RuntimeException(e);
        }

对于一些可能出错的部分 我们关闭自动提交事务
添加 try/catch 模块来帮助更好的处理事务

Statement解析

在这里插入图片描述

针对不同的数据库操作定义了不同的方法

另外一种 执行DQL查询语句 返回的是resultSet
在这里插入图片描述

里面最重要的是两种方法 一个获取位置 一个在指定位置获取属性

PreparedStatement解析

PreparedStatement 基础

在这里插入图片描述

在这里插入图片描述

PrepareStatement 解决SQL注入的问题
(而SQL注入是 通过拼接字符串方式来逃避检查)

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");

        String name = "zhangsan";
        String pass_word = "123";

        /*
        获取建立连接
         */
        String URL = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
        String UserName = "root";
        String PassWord = "qishimu621608";
        Connection conn = DriverManager.getConnection(URL, UserName, PassWord);

        // 获取state执行对象 这种情况无法防止sql注入导致的攻击
        /*
        Statement state = conn.createStatement();
        String sql = "select * from tb_user where username='"+name+"' and password='"+pass_word+"'";

        ResultSet count_log = state.executeQuery(sql);

        if(count_log.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }
         */
        String sql = "select * from tb_user where username= ? and password= ? ";

        PreparedStatement state = conn.prepareStatement(sql);

        state.setString(1, name);
        state.setString(2, pass_word);

        ResultSet count_log = state.executeQuery();

        if(count_log.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }

        // 释放资源
        conn.close();
        state.close();
        count_log.close();
    }

PreparedStatement 原理

在这里插入图片描述

预编译SQL,效率更高
防止SQL注入,将降敏感字符转义

数据库连接池

用来管理数据连接的

在这里插入图片描述

类似线程池,减少我们每次创建的时间 和 方便我们进行管理

标准接口:DataSource

public static void main(String[] args) throws Exception {
        /*
        获取当前目录所在的位置
        System.out.println(System.getProperty("user.dir"));
         */
        
        // 导入jar包
        // 定义配置文件
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("./druid.properties"));
        // 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 获取对应的数据库连接
        Connection conn = dataSource.getConnection();

        System.out.println(conn);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值