MySQL JDBC编程

📢博客主页:Lockey-s 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 📢本文由 【Lockey-s】 原创!首发于 CSDN🙉🙉🙉 📢 由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不 尽!✨ 📖精品专栏(不定时更新)✨

概念

JDBC 就是一种类和方法,是一种执行 SQL 语句的 Java API,可以对多种数据库实现统一访问,就像是班长约定好数据的统计格式一样。优势就是使得程序的可移植性大大增强,不用限定在特定数据库厂商的API。

使用

引入依赖

引入依赖就需要用 MySQL 的驱动包(把 MySQL 自身的 api 给转换成 JDBC 风格)。

下载驱动包

最好的方法就是去 MySQL 官网,但是 MySQL 被 Oracle 收购后,就很难找了,所以就可以去 maven 中央仓库 去安装,然后搜索 MySQL,第一个结果就是:在这里插入图片描述
然后点进去选择 5.1.x 系列就可以,因为我的 MySQL 是 5.7 系列的,所以用的是 5 系列的,如果 MySQL 是 8 系列的,那么就用 8 系列的,一定要和自己的 MySQL 版本匹配,如果不匹配的话,就可能导致 bug :在这里插入图片描述
然后点击前面的版本号,然后进入页面之后:在这里插入图片描述
然后点那个 jar 按钮,就会下载驱动包,jar 里面就是其他人写好的 class 文件。

导入到项目中

  1. 进入项目之后,可以创建一个目录,这里创建的是 lib
    在这里插入图片描述
  2. 把刚刚下载的 jar 文件拷贝到刚刚的目录当中,直接复制文件点一下 lib,然后粘贴就好了
    在这里插入图片描述
  3. 右键刚才的目录,有一个 add as library 然后点击这个选项,才会把 jar 包引入到项目中,项目才会读取 jar 内部的 .class 文件。否则代码就找不到 jar 里面的一些类了。在这里插入图片描述

编写代码

JDBC 插入的基本流程

创建 DataSource 对象

这个对象就描述了数据库服务器在哪里。代码如下:

DataSource dataSource = new MysqlDataSource();

其中 DataSource 是 JDBC 带的接口,后面的 MysqlDataSource 来自之前下载好的 jar 包,是一个向上转型。

设置数据库地址: 这里的数据库地址可以直接复制,127.0.0.1 表示本机 IP ,3306 是端口号,user 是数据库名,后面是字符集,SSL 是传输过程中是否加密。

((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");

设置数据库用户名:

((MysqlDataSource) dataSource).setUser();

设置数据库的密码:

((MysqlDataSource) dataSource).setPassword();

也可以写成这样,这样就没有转型了:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL();
dataSource.setUser();
dataSource.setPassword();

因为我们代码中持有的实例是 DataSource 类型,后面一些其他代码如果需要用到其它 DataSource ,相关参数也是 DataSource,代码几乎不用改动,就是“低耦合”。

和数据库服务器建立连接

通过 dataSource.Connection 来建立连接:

Connection connection = dataSource.getConnection();

要注意的是,使用的是 java.sql 里面的 Connection:在这里插入图片描述

操作数据库

  1. 操作数据库的时候,关键是构造一个 SQL语句,构造 String 类的语句,不用写分号:
String sql = "insert into student values(1,'张三')";
  1. 然后通过 Connection 里面的 prepareStatement 方法,把 String 风格的 sql语句转化为 JDBC 里面的对象:
PreparedStatement statement = connection.prepareStatement(sql);
  1. 执行 sql ,如果是插入的话,就是 executeUpdate,选择的话,就是 executeQuery:
int line = statement.executeUpdate();

这里的 line 就是返回值,就是有几行受到了影响。

  1. 释放资源,先创建的后释放,后创建的先释放。
statement.close();
connection.close();

执行代码,返回值是 1,就说明有一行受到了影响:
在这里插入图片描述
执行三次之后,返回数据库查看内容,发现多了三条记录:在这里插入图片描述

用户输入要插入的内容

通过 Scanner 来让用户输入:

int id = scanner.nextInt();
String name = scanner.next();

用户输入之后,把 id,和 name 替换到 sql 语句里面,在 sql语句 的values 当中用 ?代替:

String sql1 = "insert into student values(?,?)";

这两个 ? 就是表示当前字段的值还没有确定,先来占个位置,再使用 PreparedStatement 的 setXXX 系列方法进行替换:

PreparedStatement statement1 = connection.prepareStatement(sql1);
statement1.setInt(1,id);
statement1.setString(2,name);

这里的 1,2 就是下标,从 1 开始计算,把第一个 ?替换成 id 的值,把第二个 ?替换成 name 的值。然后打印一下替换的对象:

System.out.println("statement1" + statement1);

拼装好的 SQL 的输出值为下:
在这里插入图片描述
在这里插入图片描述
数据库当中的 lisi 也成功插入了。

JDBC 删除的基本流程

  1. 创建数据源:
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
  1. 建立连接:
Connection connection = dataSource.getConnection();
  1. 用户输入 id:
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
  1. 拼装 sql 语句:
String sql = "delete from student where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id);
  1. 执行 sql :
int line = statement.executeUpdate();
System.out.println(line);
  1. 回收资源:
statement.close();
connection.close();

运行结果如下:
在这里插入图片描述
数据库数据如下:
在这里插入图片描述
可以看到 id 为1 的都被删除了。

JDBC 更新的基本流程

  1. 创建数据源:
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
  1. 建立连接
Connection connection = dataSource.getConnection();
  1. 用户输入 id
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
String name = scanner.next();
  1. 拼装 sql 语句
String sql = "update student set name = ? where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, name);
statement.setInt(2, id);
System.out.println("statement" + statement);
  1. 执行 sql
int line = statement.executeUpdate();
System.out.println("line" + line);
  1. 回收资源
statement.close();
connection.close();

数据库当中 id等于 2 的名字是:lisi
在这里插入图片描述
执行结果如下:
在这里插入图片描述
可以看到数据库当中的数据也被修改了:
在这里插入图片描述

JDBC 查找的基本流程

  1. 创建数据源:
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
  1. 建立连接
Connection connection = dataSource.getConnection();
  1. 拼装 sql 语句
String sql = "select * from student order by id";
PreparedStatement statement = connection.prepareStatement(sql);
  1. 执行 sql,因为查询操作返回的是一个临时表,所以用 executeQuery,返回的临时表用 ResultSet 来表示。
ResultSet resultSet = statement.executeQuery();
  1. 遍历结果集合,也就是遍历返回的临时表,先获取到返回的每一行,再获取到这一结果的每一列。
while (resultSet.next()) {
    //先针对一行来获取列
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    System.out.println("id= " + id + " ,name= " + name);
}
  1. 关闭资源
resultSet.close();
statement.close();
connection.close();

数据库资源如下:
在这里插入图片描述
代码执行结果(按 id 顺序排列)如下:在这里插入图片描述

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lockey-s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值