• MySQL的JDBC 编程


    目录

    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工作原理

     

    3. JDBC使用

    3.1 驱动包的下载与导入

    下载方法:

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

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

    1.下载mysql驱动包 

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

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

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

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

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

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

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

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

     


     

    3.2 JDBC使用步骤(插入)

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

     

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

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

    2. 建立数据库连接

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

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

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

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

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

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

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

     也可以这样写,但不建议

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

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

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

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

    3. 创建操作命令

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

     Connection connection = dataSource.getConnection();

    4. 构造和执行SQL语句

    构造要执行的SQL语句

    (1)直接插入的 

    1. //1.构造请求
    2. String sql = "insert into student1 values(1, '张三')";
    3. PreparedStatement statement = connection.prepareStatement(sql);
    4. //2.发送请求 & 读取响应
    5. //返回影响到的行数
    6. int n = statement.executeUpdate();
    7. System.out.println("n = " + n);

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

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

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

     

     执行SQL,执行方法有两个

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

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

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

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

    1. //用户输入,通过用户输入的数据,来确定插入的值
    2. Scanner scanner = new Scanner(System.in);
    3. System.out.println("请输入要插入的学号:");
    4. int id = scanner.nextInt();
    5. System.out.println("请输入要插入的名字:");
    6. String name = scanner.next();
    7. //构造sql语句
    8. String sql = "insert into student1 values(?,?)";
    9. PreparedStatement statement = connection.prepareStatement(sql);
    10. statement.setInt(1,id);
    11. statement.setString(2,name);
    12. System.out.println("statement: " + statement);
    13. //执行sql语句
    14. int n = statement.executeUpdate();
    15. System.out.println("n = " + n);

    5. 释放资源

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

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

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

    1. statement.close();
    2. connection.close();

    执行代码

    影响了一行

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


     

    4.JDBC修改删除查询

    (1)修改 

    1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    2. import javax.sql.DataSource;
    3. import java.sql.Connection;
    4. import java.sql.PreparedStatement;
    5. import java.sql.SQLException;
    6. import java.util.Scanner;
    7. public class JDBCUpdate {
    8. public static void main(String[] args) throws SQLException {
    9. //1.创建数据源
    10. DataSource dataSource = new MysqlDataSource();
    11. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
    12. ((MysqlDataSource)dataSource).setUser("root");
    13. ((MysqlDataSource)dataSource).setPassword("111111");
    14. //2.和数据库建立连接
    15. Connection connection = dataSource.getConnection();
    16. //3.构造sql语句
    17. Scanner scanner = new Scanner(System.in);
    18. System.out.println("请输入要修改的同学学号:");
    19. int id = scanner.nextInt();
    20. System.out.println("请输入要修改的同学姓名:");
    21. String name = scanner.next();
    22. String sql = "update student1 set name = ? where id = ?";
    23. PreparedStatement statement = connection.prepareStatement(sql);
    24. statement.setString(1,name);
    25. statement.setInt(2,id);
    26. //4.执行sql语句
    27. int n = statement.executeUpdate();
    28. System.out.println("n = " + n);
    29. //5.关闭释放资源
    30. statement.close();
    31. statement.close();
    32. }
    33. }

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

     (2)删除

    1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    2. import javax.sql.DataSource;
    3. import java.sql.Connection;
    4. import java.sql.PreparedStatement;
    5. import java.sql.SQLException;
    6. import java.util.Scanner;
    7. /**
    8. * Created with IntelliJ IDEA.
    9. * Description:
    10. * User: 28463
    11. * Date: 2022—08—16
    12. * Time: 13:49
    13. */
    14. public class JDBCDelete {
    15. public static void main(String[] args) throws SQLException {
    16. //1.创建数据源
    17. DataSource dataSource = new MysqlDataSource();
    18. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
    19. ((MysqlDataSource)dataSource).setUser("root");
    20. ((MysqlDataSource)dataSource).setPassword("111111");
    21. //2.和数据库建立连接
    22. Connection connection = dataSource.getConnection();
    23. //3.构造sql语句
    24. Scanner scanner = new Scanner(System.in);
    25. System.out.println("请输入要删除的同学学号:");
    26. int id = scanner.nextInt();
    27. String sql = "delete from student1 where id = ?";
    28. PreparedStatement statement = connection.prepareStatement(sql);
    29. statement.setInt(1,id);
    30. //4.执行sql语句
    31. int n = statement.executeUpdate();
    32. System.out.println("n = " + n);
    33. //5.关闭释放资源
    34. statement.close();
    35. connection.close();
    36. }
    37. }

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

     (3)查询

    1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    2. import javax.sql.DataSource;
    3. import java.sql.Connection;
    4. import java.sql.PreparedStatement;
    5. import java.sql.ResultSet;
    6. import java.sql.SQLException;
    7. import java.util.Scanner;
    8. /**
    9. * Created with IntelliJ IDEA.
    10. * Description:
    11. * User: 28463
    12. * Date: 2022—08—16
    13. * Time: 14:03
    14. */
    15. public class JDBCSelect {
    16. public static void main(String[] args) throws SQLException {
    17. //1.创建数据源
    18. DataSource dataSource = new MysqlDataSource();
    19. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
    20. ((MysqlDataSource)dataSource).setUser("root");
    21. ((MysqlDataSource)dataSource).setPassword("111111");
    22. //2.和数据库建立连接
    23. Connection connection = dataSource.getConnection();
    24. //3.构造sql语句
    25. String sql = "select * from student1";
    26. PreparedStatement statement = connection.prepareStatement(sql);
    27. //4.执行sql语句
    28. //查询语句要使用executeQuery来完成
    29. //返回结果是ResultSet,结果集,里面是一个“表”这样的数据结构
    30. ResultSet resultSet = statement.executeQuery();
    31. //5.遍历结果集合
    32. while (resultSet.next()) {
    33. //每次循环,都可以获取resultSet中的一行,进一步的就可以拿到每一列
    34. int id = resultSet.getInt("id");
    35. String name = resultSet.getString("name");
    36. System.out.println("id = " + id + ", name = " + name);
    37. }
    38. //6.释放资源
    39. resultSet.close();
    40. statement.close();
    41. connection.close();
    42. }
    43. }

     也可以加上条件查询


     

  • 相关阅读:
    关于 LAF 函数计算的一些思考
    ES & Kibana 安装
    Linux操作系统的Web服务器优点
    C/C++_IO缓存问题
    [开发] Qt编译mysql驱动
    Nacos服务注册与发现
    解密Prompt系列8. 无需训练让LLM支持超长输入:知识库 & unlimiformer & PCW & NBCE
    哪些企业适合服务器托管?为什么做服务器托管?
    网络安全中常用浏览器插件、拓展
    Android Studio 快捷键及使用技巧汇总
  • 原文地址:https://blog.csdn.net/m0_58761900/article/details/126197863