开开心心带你学习MySQL数据库之节尾篇下

e2c6a1f8f6330f3e6a2948ca3ef7f429

真的勇士,那就是看清生活的真相之后,依然热爱生活。 —— 罗曼·罗兰

JDBC编程的基本工作

准备工作:
1.下载 mysql驱动包 ~~ maven 中央仓库
2.导入到项目中复制到项目目录下,标志为 library

编写代码:
1.创建数据源(描述数据库服务器所在的位置)
2.建立连接
3.构造SQL语句
4.执行SQL语句
5.释放资源

DataSource => Connection => PreparedStatement
DataSource ~~ 描述数据源
Connection ~~ 描述连接,连接是由数据源建立的
PreparedStatement ~~ 预编译语句

动态插入数据操作

代码如下:

public class JDBCInsert2 {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //JDBC 需要通过一下步骤来完成开发

        //1. 创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/fly?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("0213");


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

        //3. 从控制台读取用户的输入内容
        System.out.println("请输入学生姓名: ");
        String name = scanner.next();
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        //4. 构造SQL语句
        //String sql = "insert into student value(" + id + ",'" + name + "' )";
        // => 这样写容易被 sql注入 ~~ 网络安全中一种老牌的攻击方式

        //更好的写法,借助这个PreparedStatement的拼装功能来实现~~
        String sql = "insert into student value(?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        //把占位符替换成指定的值
        statement.setInt(1, id);
        statement.setString(2, name);
        //这个打印需要加到数据之后
        System.out.println(statement);

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


        //5. 释放必要的资源
        statement.close();
        connection.close();
    }
}
为什么要释放资源

数据库的客户端和服务器,之间进行通信的时候,是要消耗一定的系统资源的,包括不限于,CPU,内存,硬盘,带宽…
客户端也就罢了,拿服务器来说,同一时刻要处理很多个客户端 ~~ 给一个客户端提供服务,需要消耗一定的资源…给十个,给一百个呢???
如何能更好的利用这些资源? => 客户端得省着点用(不用的时候就赶紧释放)

释放资源的顺序

谁是后创建的,谁就先释放!!
在代码中,后创建的是语句 => 语句先释放
先创建的是连接 => 连接后释放

如何理解了???
有句古话叫,”大门不出,二门不迈” => 庭院布局如下
image-20230912182939717

咱们当前使用的JDBC是使用 DataSource 这样的方式来编写的.
还有一种写法 DriverManager,通过反射的方式加载驱动包,中的类,进一步进行后续操作的~~

image-20230912222308339

不推荐使用,原因:

  • 反射是属于 java开发中的特殊手段!!
    使用反射伤敌一千,自损八百 ~~ 不到万不得已,不要轻易使用!!!
    反射的代码可读性非常差,编译器难以对代码的正确性进行检查
    非常容易产生运行时异常 ~~ 类似于医生使用镇痛类药物杜冷丁

  • 2.DataSource内置了数据库连接池.可以复用连接,提高连接服务器的效率

池(Pool)计算机非常重要非常广泛使用的术语

如何理解池这个概念

注:在此声明,下面这个例子,是博主为了你们理解才写的,与博主本人毫无关系

假设有一个妹子,长得好看,又有才华,所以有很多的人在追求她,
但是她同一时刻只能和一个追求者交往 ~~
这时,妹子和追求者A交往腻歪了,想换一个男朋友,一上来就和A说分手,不太现实
~~ 于是,她就得拿着放大镜顶着男朋友看,看他哪里做得不太对,做得不对的地方
就故意小题大做,上纲上线,帽子一扣,女权一顿打,这样一次不行,反复多来几次,
~~ 让男朋友对他失去耐心了,实在忍受不了,就和他提分手,就水到渠成了

于是,妹子和追求者A分手后,就开始和追求者B交往,和B开始培养感情,
先发发微信啊,发发QQ啥的,先聊一聊,相互之间熟悉了一点之后,再一起上上课啊,
一起吃个饭,一起出去玩….最终,俩人就走在一起了

但是了,从和追求者A分手到和最求者B走在一起就需要花费妹子很多时间和精力(成本),
甚至再和追求者B交往腻歪了,又想和最求者C交往,和追求者C交往腻歪了,又想和最求者D交往
………(以下省略三万字!!!)

问题来了,如何让妹子提高更换男朋友的效率了???
办法很简单,提前和追求者B,C,D…….培养感情
~~ 在和男朋友A交往的同时,不忘和追求者们搞暧昧
~~ 这样和A交往腻歪了,和A分手的第二天,B就可以上位了,毕竟感情已经提前培养好了,铺垫到位了,轻松实现无缝衔接…和B交往腻歪了,还可以换成C…和C交往腻歪了,还可以换成D… ~~ 妹子就可以做到随时分,随时换了
~~ 这时B,C,D……就都可以叫做妹子的备胎
~~ 他们就是妹子的备胎‘’池‘’

池本质上都是对"资源进行预申请"

虽然说现在还不用,但是先申请过来,后面随时用,随时就从池子里面拿,不用了再放回池里
~~ 随时想用就从池子里面取,比起想用的时候,还得从头去申请资源来得快得多
~~ 一个提高效率的表现

唉!”有人在讲段子,有人在照镜子”


实现查询操作

注:查询的返回结果不是单纯的int ,而是ResultSet 对象 ~~ 结果集合
代码如下:

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;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fly(逐梦者)
 * Date: 2023-09-12
 * Time: 23:25
 */
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/fly?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("0213");

        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.执行SQL
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集合
        while (resultSet.next()) {
    
    
            //把 resultSet想象成一个表格.同时表格这里有个光标,初始情况下光标指向表最上面
            //每次调用 next,光标往下走一行
            //当光标指向某一行的时候,就可以通过 getXXX来获取到当前这行里的数据
            /*getXXX是取出这一行的指定列的值
            ~~使用的方法要和列的类型匹配
            ~~参数可以是"第几列"下标也可以是列名~(推荐)*/
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);

            //当光标已经把整个表都遍历完了,next就会返回false了
        }

        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
以后实际工作了,是啥样子??

绝对是比现在上学的情况苦很多
如果你觉得现在上学苦,不好意思,上班了之后,会比上学辛苦十倍
虽然读研也很苦,但是上班的苦远远超过读研的苦 ~~ 强烈建议你们考研!!!
原因:
(1)也很简单上学的时候,没啥压力,是非常轻松的~~
(2)上班的时候压力就会很大,工作中的压力,生活中的压力,各个方面的压力
(3)你的工作内容你完全没兴趣(常态) ~~ 90%的人工作都是没兴趣的
~~ 就算某个东西你非常感兴趣,要是让你当成工作来做,很快就没兴趣了
好比大部分人都爱玩游戏,但是如果有一天当年成为职业选手了,一天十几个小时一天就只能玩
这一个英雄,玩个几十遍,就算你再感兴趣,让你天天夜以继日的这样玩,你也会没兴趣的

以后上班就一个目标,钱,打工人没资格谈兴趣

一个程序猿,一天工作按照10个小时算 ~~ 写代码的时间,撑死就2-3个小时
主要的工作:
1.调试bug ~~ 主旋律
2.和各种人pk(包括不限于,和产品经理,和测试,和运维,和老板…….)
3.开发产品需求 ~~ 写代码了
4.系统优化(开发+测试+设计+其他方面) ~~ 一般是有经验的老程序猿才接触得到

千万不要对"上班”充满憧憬

成长过程中,周围的人 ~~ 很少告诉你真相.都是给你画大饼

猜你喜欢

转载自blog.csdn.net/m0_73740682/article/details/132843359