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的,我们还是要有一定的了解💕

  • 36
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值