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

2023-11-04

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.系统优化(开发+测试+设计+其他方面) ~~ 一般是有经验的老程序猿才接触得到

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开开心心带你学习MySQL数据库之节尾篇下 的相关文章

  • 不同的数据库使用不同的名称引用吗?

    例如 mysql引用表名使用 SELECT FROM table name 注意 其他数据库是否使用不同的字符来引用其表名 这种引号的使用称为分隔标识符 它是 SQL 的重要组成部分 因为否则您将无法使用以下标识符 例如表名和列名 包含空格
  • 检查 MySQL 和 PHP 中是否都存在 ids 列表

    最有效的方法是什么MySQL and PHP检查 id 列表是否全部存在 我希望函数返回结果是true if allid 存在 否则false 我刚在想 ids array 2233 5545 9478 5343 3545 do all g
  • 在php中循环多维数组并执行mysql插入(股票数据)

    我有一个多维数组 我希望循环遍历它并为数组中的值执行 mysql 数据库插入 我需要插入到 sql 查询中的数组值是 candles 0 complete candles 0 volume candles 0 mid h candles 0
  • Mysql - 如何搜索26条以字母开头的记录?

    基本上 我正在尝试创建一个查询 该查询可以根据英语字母表中的字母 26 个字母 从表中检索 26 个单词 所以 苹果 香蕉 椰子 等等 我一直在使用 like a 所以 SELECT from word WHERE word name li
  • 高级 MySQL:查找民意调查响应之间的相关性

    我有四个 MySQL 表 users 身份证号 姓名 polls ID 文本 options id poll id 文本 回应 id poll id 选项 id 用户 id 给定一个特定的民意调查和一个特定的选项 我想生成一个表格 显示其他
  • 使用 JdbcTemplate 进行动态查询

    我有一个关于使用 JdbcTemplate 进行动态查询的问题 我的代码如下 String insertQueries INSERT INTO tablename StringJoiner joiner new StringJoiner S
  • 在MySQL中永久设置auto_increment_offset

    我以 root 身份运行命令 set auto increment offset 2 但从其他连接上看不到效果 为什么不 它是全球性的 From http dev mysql com doc refman 5 1 en replicatio
  • MYSQL:如何从姓氏中找到player_id?

    我现在尝试使用非标准化 摘要 表中的数据填充 testMatch 表 如下 测试匹配表 Field Type Null Key Default Extra match id int 11 NO PRI NULL match date dat
  • 两个表之间可以有两种关系吗?

    有两个表 EMPLOYER 和 EMPLOYEE 由于每个 EMPLOYEE 都被分配给一个 EMPLOYER 因此他们之间存在 1 N 关系 简单的事情 但我也希望能够模拟一种情况 每个雇主都可以选择他的one最喜欢的员工 他最好什么也不
  • 从mysql数据库读取pdf文件

    我正在使用这个例子http www php mysql tutorial com wikis mysql tutorials uploading files to mysql database aspx http www php mysql
  • 为什么java字符串在MYSQL中不保存为UTF-8?

    message new String round id getBytes UTF 8 conn DriverManager getConnection jdbc mysql host db useUnicode true character
  • mysql utf8_general_ci 区分大小写

    我有一个 mysql 数据库 我使用 utf8 general ci 不区分大小写 在我的表中 我有一些列 例如 ID 和区分大小写的数据 例如 iSZ6fX 或 AscSc2 为了区分大写和小写 最好只在这些列上设置 utf8 bin 如
  • 使用存储过程并发访问MySQL数据库

    我有一个存储过程 它将读取然后增加数据库中的值 许多程序同时使用这个特定的过程 我担心并发问题 特别是读写器问题 有人可以建议我任何可能的解决方案吗 thanks 首先 正如另一篇文章中所述 使用 InnoDB 从 MySQL 5 5 开始
  • 保存用户的身高和体重

    我应该如何将用户的身高和体重存储在MySQL数据库中 以便我可以使用这些信息来查找特定身高或体重内的用户 另外 我需要能够以英制或公制显示此信息 我的想法是存储以厘米为单位的身高和以公斤为单位的体重信息 我更喜欢公制而不是英制 我什至可以让
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • 使用 JOIN 和 UNION 合并不同表中的记录

    我需要创建一个查询来组合两个表中的数据 我认为可能是 JOIN 和 UNION 的组合 在此示例中 我需要列出状态处于活动状态的所有姓名 仅一次 并将他们的葡萄酒 苏打水 晚餐 甜点和水果偏好组合起来 按姓名排序 我不确定单独的 JOIN
  • Mysql - 如何比较两个 Json 对象?

    将整个 MySql json 列与 json 对象进行比较的语法是什么 以下不起作用 select count criteria from my alerts where criteria industries 1 locations 1
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht

随机推荐

  • C#将字符串格式化为Json

    private string ConvertStringToJson string str 格式化json字符串 JsonSerializer serializer new JsonSerializer TextReader tr new
  • 如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨 很多地方一不小心就会出错 举例来说 请考虑以下情况 现在 我们要判断一个全局对象myObj是否存在 如果不存在 就对它进行声明 用自然语言描述的算法如下 if myObj不存在 声明myObj 你可能
  • 机器学习总结之第二章模型评估与选择

    2 1经验误差与过拟合 错误率 a个样本分类错误 m个样本 精度 1 错误率 误差 学习器实际预测输出与样本的真是输出之间的差异 训练误差 即经验误差 学习器在训练集上的误差 泛化误差 学习器在新样本上的误差 过拟合 学习器把训练样本学的
  • PHP自增、自减运算流程解析

    PHP自增运算解析 0x01 PHP自增运算 代码如下 0x02 PHP自减运算 代码如下 0x01 PHP自增运算 代码如下
  • Java判断一个时间是否在时间区间内

    package com liying tiger test import java text ParseException import java text SimpleDateFormat import java util Calenda
  • 图像处理——滤波器的比较

    滤波器 方框滤波 boxFilter 均值滤波 blur 高斯滤波 GaussianBlur 中值滤波 medianBlur 线性滤波器 线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率 常见的有 低通 高通
  • linux命令 chmod 755的含义 及drwxr-xr-x 的含义

    linux drwxr xr x 第一位表示文件类型 d是目录文件 l是链接文件 是普通文件 p是管道 第2 4位表示这个文件的属主拥有的权限 r是读 w是写 x是执行 第5 7位表示和这个文件属主所在同一个组的用户所具有的权限 第8 10
  • docker 安装node

    docker 安装node 1 使用docker安装node 使用docker安装 docker pull node 拉取镜像 docker run id name c node node 创建容器 可以看到已经装好了 启动node doc
  • Linux系统编程-C++ I/O库

    文章目录 一 总述 二 输出缓冲 三 文件输入输出 四 string流 五 输入输出格式 总述 1 控制布尔值的格式 2 指定整型值的进制 3 在输出中指出进制 4 控制浮点数格式 4 1 指定打印精度 5 输出空白 六 未格式化的输入输出
  • java 数组中存储26个英文字母_利用数组打印26个英文字母

    可以考虑下面两种程序 1 public class Letter public static void main String args for char c a c lt z c System out print c 2 class AB
  • 如何实现一个定时器?看这一篇就够了

    本文主要介绍定时器作用 实现定时器数据结构选取 并详细介绍了跳表 红黑树 时间轮实现定时器的思路和方法 定时器作用 定时器在各种场景都需要用到 比如游戏的Buff实现 Redis中的过期任务 Linux中的定时任务等等 顾名思义 定时器的主
  • Qt常用部件介绍

    这里先给大家介绍 Designer 界面设计器 中例举的常用部件 以便对 Qt 的部件有一定认识 其具体用法后面再作介绍 布局管理组 Layouts 空间间隔组 弹簧 Spacers 按钮组 buttons 项目视图组 Item Views
  • 设计模式深入浅出--21.命令模式简单实例及其在JDK中的应用

    命令模式 定义 将 请求 封装成对象 以便使用不同的请求 命令模式解决了应用程序中对象的职责以及它们之间的通信方式 类型 行为型 适用场景 请求调用者和请求接收者需要解耦 使得调用者和接收者不直接交互 需要抽象出等待执行的行为 优点 降低解
  • 数据表格(QTableWidget)

    一 简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件 QTableWidget单元格数据是QTableWidgetItem对象来实现的 整个表格都需要用逐个单元格对象QTableWidgetItem构建起来 二 详解
  • Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1 Presto语法 1 1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUID HyperLogLog KHyperL
  • muduo1——编程风格:面向对象的编程和基于对象的编程(上)

    muduo库其实不是面向对象的编程 而是基于对象的编程 那么在进入正式的muduo源码分析之前 先来看看这两种编程风格 一 面向对象编程风格 通过对一个线程类的封装来进行讲解 Thread是一个抽象类不能实例化对象 TestThread是派
  • Hp DL380服务器瘫痪如何恢复服务器数据(多图)

    服务器数据恢复故障简介 需要进行数据恢复的是一台HP DL380服务器 三块300GSAS硬盘组成raid阵列 磁盘故障导致整个RAID组瘫痪 其中一块硬盘状态灯为红色 数据库存储在D分区 备份存储在E分区 存储故障 造成D分区不可识别 E
  • Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量 在函数内部定义的变量称为局部变量 全局变量所有作用域都可用 局部变量只能在本函数可用 变量的使用顺序是 局部变量 gt 全局变量 也就是说 优先使用局部变量 那么问题来了 如果想在函数内使用
  • LabVIEW心率监测装置

    LabVIEW大作业 LabVIEW心率采集装置 本设计为我的LabVIEW课程大作业 利用proteus实验仿真软件设计一个了基于stc12c5a单片机的心率采集系统 并在PC机上的Windows环境下利用LabVIEW软件实现心率数据的
  • 开开心心带你学习MySQL数据库之节尾篇下

    真的勇士 那就是看清生活的真相之后 依然热爱生活 罗曼 罗兰 JDBC编程的基本工作 准备工作 1 下载 mysql驱动包 maven 中央仓库 2 导入到项目中复制到项目目录下 标志为 library 编写代码 1 创建数据源 描述数据库