MySQL JDBC编程

  前言👀~

上一章我们介绍了数据库的索引与事务,本章节我们介绍JDBC编程,使用java代码和数据库打交道

如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,如果内容有什么问题的话,欢迎各位评论纠正 🤞🤞🤞

12b46cd836b7495695ce3560ea45749c.jpeg

个人主页:N_0050-CSDN博客

相关专栏:java SE_N_0050的博客-CSDN博客 java数据结构_N_0050的博客-CSDN博客


MySQL JDBC编程

JDBC编程:

通过 java代码 操作 mysql数据库 统一所有操作数据库的接口 可以理解为这是java连接数据库的规范


数据库编程,是需要数据库服务器提供一些API(Application Programming Interface)应用程序编程接口供程序员去使用的,然后就能数据库进行交互,可以理解为一组已经实现的类和一组(函数或方法)或库


JDBC的详细解释:如果上述这样不能理解,可以这样理解,java提供了一个标准的API(jdbc由一些类和接口组成)里面定义了与数据库交互的标准方法,然后各大数据库厂商照着这个标准(可以说是实现了这个接口)各自设计了一个驱动程序,开发人员可以通过这个驱动程序就可以操作对应的数据库了,其实开发人员在调用这个API(jdbc)的时候,是通过这个驱动程序(把java中的请求转为对数据库能理解的原生API调用),然后调用数据库原生的API去操作数据库的

驱动程序的理解:数据库厂商提供的驱动程序可以类比为适配器。假设你的电脑只有Type-C接口,但你的键盘或鼠标使用的是Type-B接口。为了在电脑上使用这些设备,你需要一个适配器,该适配器一端有Type-C接口连接电脑,另一端有Type-B接口连接你的键盘或鼠标。这样,适配器就可以让你的电脑和外设成功连接并正常工作。

耦合:可以想想事务的隔离性,事务之间的影响越小,隔离性越高,耦合也差不多这个意思就是如果我写了两段代码,修改了其中一段代码另外一段代码疯狂报错,那这个称为高耦合,反之,则称为低耦合

内聚:可以这样理解,就比如我们在写一个功能一个模块的时候,如果我们不集中写到一起,东写写西写写,代码看起来很乱,找的时候也麻烦,找还能找出跟这个模块没有什么关系的代码,这种可以称为低内聚,反之,则称为高内聚


操作步骤

1.获取数据源:

        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("1234");

//         两种写法
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
//        mysqlDataSource.setUser("root");
//        mysqlDataSource.setPassword("1234");


为什么选择这种写法?

DataSource是JDBC中的一个接口里面提供获取连接数据库的方法,MySQLDataSource是MySQL厂商提供的一个实现了DataSource的类,不同的数据库厂商有各自实现DataSource的类

上面是进行向上转型,先在堆上创建一个MySQLDataSource对象分配内存空间,然后把它的引用赋值给dataSource这个父类引用,然后这个父类引用指向这个对象,下面是进行向下转型,把父类的类型转为子类的类型,总结一下这样做是因为不同数据库厂商提供的实现类不一样,这样实现了低耦合

路径解释

jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false

URL:专业点说网络上的资源位置,简单点说就是网址

127.0.0.1这是一个特殊的IP地址每台电脑都有这个环回IP,"环回IP" 环回就是自己把数据发给自己,这里的jdbc程序和mysql程序都在自己的主机上使用环回IP即可,如果在不同的主机的话,就需要对应主机的IP

3306:端口号,好比收件人电话,也可以这样理解,食堂对应的窗口


2.建立连接

        // 2.和数据库服务器建立连接 这样后续才能和数据库有 请求-响应 的交互
        Connection connection = dataSource.getConnection();


3.构造SQL语句与预处理SQL语句

        // 3.构造sql语句
//        String sql = "insert into class values(1,'老三')";
//        String sql = "insert into class values(" + id + ",'" + name + "')"; 不推荐可能会造成sql注入
        String sql = "insert into class values(?,?)"; // 使用占位符
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, id); //这个数字表示要替换上面的第几个问号(?),替换的字段是什么 从1开始 没有0
        preparedStatement.setString(2, name);

Prepared Statement:这里的preparedstatement表示会对这个sql语句进行预处理,其实可以直接把这个字符串格式的sql语句传给数据库服务器进行处理,mysql数据库会对你的语句进行解析和校验,但数据库服务器是服务多个客户端,这个过程的开销和负担很大,所以我们直接在客户端对sql语句进行解析和校验,然后再发到数据库服务器


4.执行SQL语句


 首先是进行CRUD操作的代码

        // 4.执行sql 把sql语句发给服务器 返回的是一个整数 表示受影响的行数
        int n = preparedStatement.executeUpdate();
        System.out.println(n);

这个n表示受影响的行数,如图在客户端进行操作的返回结果

接着就是进行查询操作的代码

        // 4.执行sql 这里用的是查询 返回的是一个结果集(一张临时表) 在临时表上会有一个光标 初始化位置指向列
        ResultSet resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            int id = resultSet.getInt("id"); // 根据列名获取数据
            String name = resultSet.getString("name");
            System.out.println("id=" + id + ",name=" + name);
        }

这时候会返回的是一个结果集,也就是一张临时表,我们使用resultSet并且进行循环
 


5.释放资源,关闭连接

        // 5.释放资源,关闭连接 后获取的资源 先释放
        preparedStatement.close();
        connection.close();

这个步骤注意的地方就是后获取的资源要先进行释放

以上便是本章的内容,JDBC虽然现在不怎么用了,但现在的一些对数据库进行操作的框架都是基于jdbc的,我们还是要有一定的了解💕

相关推荐

  1. JDBC编程(数据库编程)

    2024-06-08 21:52:03       43 阅读
  2. Rust编程-编写自动化测试

    2024-06-08 21:52:03       30 阅读
  3. RDD<span style='color:red;'>编程</span>

    RDD编程

    2024-06-08 21:52:03      50 阅读
  4. Shell编程

    2024-06-08 21:52:03       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 21:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 21:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 21:52:03       87 阅读
  4. Python语言-面向对象

    2024-06-08 21:52:03       96 阅读

热门阅读

  1. 第四章:模板进阶

    2024-06-08 21:52:03       25 阅读
  2. HttpClient Overview(翻译)

    2024-06-08 21:52:03       35 阅读
  3. DynamicExpresso:强大的动态执行C#表达式解析器

    2024-06-08 21:52:03       31 阅读
  4. 004 MySQL练习

    2024-06-08 21:52:03       33 阅读
  5. PHP实名认证接口开发示例、银行卡实名认证API

    2024-06-08 21:52:03       32 阅读
  6. 软件架构初探

    2024-06-08 21:52:03       26 阅读
  7. 【0286】Postgres内核 shared buffer pool 初始化实现

    2024-06-08 21:52:03       31 阅读
  8. C语言习题~day32

    2024-06-08 21:52:03       34 阅读