MySQL的JDBC 编程

2年前 (2022) 程序员胖胖胖虎阿
253 0 0

目录

1.数据库编程:JDBC

2. JDBC工作原理

3. JDBC使用

3.1 驱动包的下载与导入

3.2 JDBC使用步骤(插入)

4.JDBC修改删除查询


1. 将数据库驱动包,添加到项目依赖中

创建目录,拷贝jar包,然后add as library

2. 创建数据源

DataSourse:数据源,描述了数据库服务器在哪里

3. 和数据库建立连接

使用JDBC里的Connection将代码和数据库服务器进行连接

一个程序中,通常有一个数据源对象,可以有多个Connection对象

4. 构造sql语句

PreparedStatement:表示一个预处理过的SQL语句对象

5. 执行sql语句

(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数

(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收

6. 释放资源

colse释放资源 先创建的后释放,后创建的先释放

1.数据库编程:JDBC

各种数据库,都会提供API,方便编程语言来控制
API:就是应用程序编程接口,提供了一组类/方法,让程序员直接调用
Oracle、SQL Server、MySQL、SQLite... 不同种类的数据库提供的API不一样

API不一样就会有很多问题 (

提高程序员学习成本;
如果项目要把数据库替换成另一种,改动会非常大

Java中为了解决这个问题,就提供了一组统一风格的数据库操作API
然后让这些数据库厂商来适配java的API
所以程序员只要掌握这一套
java的API,就可以操作各种数据库,java把这个API叫JDBC

 

2. JDBC工作原理

MySQL的JDBC 编程

 

3. JDBC使用

3.1 驱动包的下载与导入

下载方法:

(1)去Oracle官网下载(麻烦需要去官网登录注册才可以下载)

(2)去中央仓库下载(https://mvnrepository.com/) 

1.下载mysql驱动包 

1)打开中央仓库—搜索mysql驱动包

MySQL的JDBC 编程

 2)找到和自己的mysql大版本对应的驱动包

MySQL的JDBC 编程

 3)找到对应大版本,然后点击进行下载

MySQL的JDBC 编程

 下载的是一个驱动包,驱动包在代码中才能看出来

MySQL的JDBC 编程

 2.把刚刚下载的jar包导入到项目中,使用

1)先创建一个目录,比如名字叫lib,和src同级

MySQL的JDBC 编程

 2)把刚才的jar包拷贝进lib中

MySQL的JDBC 编程

 3)右键刚才的目录lib,找到add as library ,是idea可以识别到jar包

MySQL的JDBC 编程

 MySQL的JDBC 编程


 

3.2 JDBC使用步骤(插入)

通过JDBC来操作数据库,往数据库java01中的student1表中插入一条记录

MySQL的JDBC 编程 

1. 将数据库驱动包,添加到项目依赖中

右键项目创建目录(点Directory,和src同级)——>拷贝驱动包到目录——>右键目录点击add as library(让idea识别jar包)

MySQL的JDBC 编程

2. 建立数据库连接

创建数据源对象,数据源对象就描述了要访问的数据库是什么和数据库位置在哪里

        DataSource dataSource = new MysqlDataSource();//向下转型
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

MySQL的JDBC 编程 每种数据库都会提供对应的类来实现DataSourse接口

MySQL的JDBC 编程

调用的这个方法不是DataSource中的,而是MysqlDataSource转成子类引用,才可以调用这个方法(向下转型)

DataSource是服务于各种数据库的,
MysqlDataSource只服务于MySQL

MySQL中,是一个客户端服务器的程序,描述服务器的位置
会使用URL(去唯一资源定位符)这个概念来表示
但是有点的数据库,比如SQLite,就不是客户端服务器结构的
也就不使用URL

DataSource考虑到通用性,就不能使用setURL这样的方法

 也可以这样写,但不建议

MySQL的JDBC 编程

这种写法是不使用多态的写法

这样写可能会让MysqlDataSource这个类型出现在代码的很多地方

导致MySQL和项目的耦合性就提高了

(如果以后要更换成其他数据库,就需要把很多出现MysqlDataSoucre这个类型的地方,都要进行修改,非常麻烦) 

MySQL的JDBC 编程

3. 创建操作命令

让代码和数据库服务器建立连接

 Connection connection = dataSource.getConnection();

MySQL的JDBC 编程

4. 构造和执行SQL语句

构造要执行的SQL语句

(1)直接插入的 

        //1.构造请求
        String sql = "insert into student1 values(1, '张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

        //2.发送请求 & 读取响应
        //返回影响到的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

MySQL的JDBC 编程

 SQL语句发给数据库,然后数据库对这个SQL进行解析

解析过程是比较消耗资源、消耗时间的,所以就将一部分解析的工作,放在客户端完成,

客户端完成后,1将解析结果发给数据库,这样就节省了资源开销,提高效率

 MySQL的JDBC 编程

 执行SQL,执行方法有两个

(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数

(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收

(2)用户输入,确定插入的值

这样做的好处是 代码可读性好,并且SQL注入问题得到改善

  //用户输入,通过用户输入的数据,来确定插入的值
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要插入的学号:");
        int id = scanner.nextInt();
        System.out.println("请输入要插入的名字:");
        String name = scanner.next();


        //构造sql语句
        String sql = "insert into student1 values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("statement: " + statement);

        //执行sql语句
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

5. 释放资源

完成之后,就需要关闭释放相关资源

释放资源的顺序和申请资源的顺序正好相反

(先创建的后释放,后创建的先释放)

        statement.close();
        connection.close();

执行代码

MySQL的JDBC 编程

影响了一行

打开MySQL查询一下,看插入成功了没有 

MySQL的JDBC 编程


 

4.JDBC修改删除查询

(1)修改 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCUpdate {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.构造sql语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的同学学号:");
        int id = scanner.nextInt();
        System.out.println("请输入要修改的同学姓名:");
        String name = scanner.next();

        String sql = "update student1 set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);

        //4.执行sql语句
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        //5.关闭释放资源
        statement.close();
        statement.close();
    }
}

运行代码后,在MySQL中查看是否修改成功 

MySQL的JDBC 编程

 (2)删除

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28463
 * Date: 2022—08—16
 * Time: 13:49
 */
public class JDBCDelete {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.构造sql语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的同学学号:");
        int id = scanner.nextInt();

        String sql = "delete from student1 where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);

        //4.执行sql语句
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        //5.关闭释放资源
        statement.close();
        connection.close();
    }
}

执行代码,查看是否删除成功 

MySQL的JDBC 编程

 (3)查询

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28463
 * Date: 2022—08—16
 * Time: 14:03
 */
public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.构造sql语句
        String sql = "select * from student1";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行sql语句
        //查询语句要使用executeQuery来完成
        //返回结果是ResultSet,结果集,里面是一个“表”这样的数据结构
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集合
        while (resultSet.next()) {
            //每次循环,都可以获取resultSet中的一行,进一步的就可以拿到每一列
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }

        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

MySQL的JDBC 编程

 也可以加上条件查询

MySQL的JDBC 编程


 

版权声明:程序员胖胖胖虎阿 发表于 2022年11月4日 上午8:56。
转载请注明:MySQL的JDBC 编程 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...