JDBC之Mysql

发布时间 2023-11-14 21:56:59作者: SIKeborn

一、JDBC是什么?

Java DataBase Connectivity(Java语言连接数据库)

二、JDBC的本质是什么?

JDBC是SUN公司制定的一套接口(interface)。

接口都有调用者和实现者。

面向接口调用、面向接口写实现类,这都属于面向接口编程。

三、为什么要面向接口编程?

解耦合:降低程序的耦合度,提高程序的扩展力。

多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)

(这里需要画图带大家理解。。。)

四、为什么SUN制定一套JDBC接口呢?

因为每一个数据库产品都有自己独特的实现原理

五、JDBC编程六步(需要背会)

1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)

2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。

3.获取数据库操作对象(专门执行sql语句的对象)

4.执行SQL语句(DQL,DML…)

5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)

6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)

六、IDEA编写JDBC连接MySQL

6.1 mysql-connector-java的不同版本对比

MySQL Connector / J 5.1 5.1版本支持java5及其以上的版本,支持5.6、5.7、8.0版本的mysql数据库,支持3.0、4.0、4.1、4.2版本的jdbc。在5.1中,Driver的实现类的全路径名是com.mysql.jdbc.Driver。

MySQL Connector / J 8.0 8.0版本支持java8及其以上的版本,支持5.6、5.7、8.0版本的mysql数据库,支持4.2版本的jdbc。在8.0中,Driver的实现类的全路径名是com.mysql.cj.jdbc.Driver。

下图是官网上mysql-connector-java的版本对应的mysql版本和jdk的版本。

 

 

6.2 下载驱动jar包 mysql-connector-java.

要使用mysql连接器,就要先下载它。如果是一般的项目,那我们需要下载jar包,然后放到项目的lib目录下。如果使用maven构建的项目,我们可以通过maven直接安装。不同的下载方式有不同的操作,常见的有直接官网下载和maven下载(下周讲解maven)。 下载jar包最直接的方式是从官网下载,官网地址是:https://dev.mysql.com/downloads/connector/j/。直接点链接进入mysql官网,选择所需的版本和操作系统(要下载jar包就要选:Platform Independent),然后点击download按钮就可以下载了。为java提供的连接器是Connector / J,也就是mysql-connector-java,它分为5.1版本和8.0版本。Connector / J实现了JDBC,为使用java开发的程序提供连接,方便java程序操作数据库。

6.3、从maven安装 使用maven安装mysql-connector-java就简单很多,直接打开maven的中央仓库地址,输入mysql-connector-java就可以找到不同版本的依赖。地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java

6.4 JDBC连接mysql 程序编写

6.4.1 第一种注册驱动方式
DriverManager.registerDriver(Driver driver)

 

6.4.2第二种注册驱动方式

Class.forName("xxx.xx.xx.Driver")
       6.4.3 将连接数据库的所有信息配置到配置文件中
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.209.100:3306/bigdata27?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456

 

     6.4.4 处理查询结果集  
     6.4.5  解决sql注入问题

  将原本的先拼接再编译,使用预编译数据库操作对象后变成了先编译再拼接赋值

 6.4.6 工具类封装

package com.shujia.utils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Properties;


public class MysqlTool {

    private static Connection conn;
    private MysqlTool(){}

    public static Connection getConnection(){
        try {
            //读取配置文件,获取driver,url,username,password
            //创建配置文件对象
            Properties prop = new Properties();
            //加载配置文件
            prop.load(new BufferedReader(new FileReader("mysql-jdbc/src/main/resources/mysqlinfo.properties")));
            //根据key获取value值
            String driver = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String username = prop.getProperty("username");
            String password = prop.getProperty("password");

            //1、加载驱动
            Class.forName(driver);

            //2、创建与数据库之间的连接
            conn = DriverManager.getConnection(url, username, password);
        }catch (Exception e){
            e.printStackTrace();
        }

        return conn;
    }

    public static void printResultSet(ResultSet resultSet){
        try {
            while (resultSet.next()) {
                int columnCount = resultSet.getMetaData().getColumnCount();
                StringBuilder sb = new StringBuilder();
                for(int i=1;i<=columnCount;i++){
                    sb.append(resultSet.getString(i)).append("\t");
                }
                System.out.println(sb);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
 
6.4.7 JDBC实现模糊查询
 select * from 表名(tablename) where 字段名(xxx) like '%关键词(xxx)%'

 

 

 

JDBC事务机制: 1.JDBC中的事务自动提交的,什么是自动提交? 只要执行任意一条 DML语句,则自动提交一次。这是JDBC默认的事务行为。

但是在实际的业务中,通常都是N条DML语句共同联合才能完成,必须 保证这些DML语句在同一个事务中同时成功或者同时失败

解决方案:三行重要的代码 conn.setAutoCommit(false);//手动提交事务

conn.commit();//提交事务

conn.rooback;当发生异常时或者程序错误时,进行回滚。

 

6.5 悲观锁和乐观锁的概念

事务1–>读取到版本号1.1 事务2—>读取到版本号1.1

其中事务1先修改了,修改之后看了版本号是1.1 ,于是提交修改的数据,将版本号修改为1.2 其中事务2后修改的,修改之后准备提交的时候,发现版本号是1.2 ,和它最初读的版本号不一致。回滚。

悲观锁:事务必须排队执行。数据锁住了,不允许并发。 (行级锁: select后面添加for update ) 乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。