MySQL数据库JDBC编程知识点有哪些

54次阅读
没有评论

共计 6606 个字符,预计需要花费 17 分钟才能阅读完成。

本篇内容主要讲解“MySQL 数据库 JDBC 编程知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“MySQL 数据库 JDBC 编程知识点有哪些”吧!

1.JDBC 前置工作 1.1 准备好 MySQL 驱动包

MySQL 的 jdbc 驱动包我们可以去官网下载,我们也可以 maven 中央仓库下载,这个 maven 中央仓库是什么呢?你可以理解为我们手机中的“应用商店”软件,它的作用和应用商店的作用是差不多的,只不过手机应用商店里面是手机软件,而 maven 中央仓库里面有许多的 API 以及依赖包。

现在 MySQL 已经被 Oracle 收购了,Oracle 的“吃相”有点难看,从官网找可以找到,但是我感觉 maven 中央仓库更好找一点,所以我们到 maven 中央仓库下载 jdbc 驱动包。

第一步,点进网址进入 maven 中央仓库。

第二步,搜索 MySQL,选择如下图那一个。

第三步,点击进入,找到对应大版本的 jdbc 驱动包,如果你的 MySQL 是 5 版本那驱动包也选择 5 版本的,当然如果你的 MySQL 是 8 版本,那你的驱动包也选择 8 版本。

我的 MySQL 是 5 版本所以我选择大版本为 5 的驱动包。

第四步,点击进去,按下图操作,下载驱动包。

下载完成我们的驱动包就准备好了。

1.2 创建项目

使用编译器创建一个项目,项目创建好后,按照下面的步骤操作:

第一步,创建一个目录,名字随便起,不妨叫做 lib 目录。

第二步,将下载好的驱动包拷贝到该目录。

第三步,设置选项,右键刚才创建并已经将驱动包拷贝的目录,找到 As a Lib…

这样我们的驱动包就导进我们的项目中了,然后我们就能来写 jdbc 代码了。

2.JDBC 编程步骤 2.1 创建数据源 DataSource

第一步,创建 DataSource 对象,来描述这个数据库在哪里。

DataSource dataSource = new MysqlDataSource();

其中 DataSource 为 java.sql 里面的一个 jdbc 接口,MysqlDataSource 是来源与我们所下载驱动包中的一个实现 DataSource 接口的类。

第二步,设置数据库的“位置”(URL),登录数据库的账户名和密码。

 // 设置数据库所在地址
 ((MysqlDataSource)dataSource).setURL( jdbc:mysql://127.0.0.1:3306/jdbctest/characterEncoding=utf8 useSSL=false 
 // 设置登录数据库的账户名
 ((MysqlDataSource)dataSource).setUser( root 
 // 设置登录数据库的密码
 ((MysqlDataSource)dataSource).setPassword(123456

jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8 useSSL=false 就是一个 URL,也叫唯一资源定位符。
jdbc:mysql 表示该 url 是用于 jdbc mysql 的 URL,因为数据库有很多,不止 jdbc 一种,所以需要细分。

具体含义自主对照:URL 类型声明:// 数据库的地址 / 数据库名? 字符集编码 是否加密。

2.2 连接数据库

第三步,和服务器建立连接,创建好数据源 DataSource 对象后,调用该对象的 getConnection() 方法,获取 java.sql.Connection 对象,这样就与数据库建立起来连接了。

Connection connection = dataSource.getConnection();

2.3 构造并执行 sql 语句(插入操作为例)

第四步,构造 sql 语句字符串,并将该语句包装成 PreparedStatement 对象,即调用 Connection 对象的 prepareStatement 方法,参数是 sql 字符串,会返回一个 PreparedStatement 对象,然后我们再调用 PreparedStatement 对象中的 executeUpdate 方法或 executeQuery 方法执行 sql 语句。

我们先以插入操作为例。

 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  insert into student values(1,  张三) 
 // 将 sql 字符串包装成一个语句对象,表示待执行的 sql 的对象
 PreparedStatement statement = connection.prepareStatement(sql);
 // 执行 sql
 // 如果待执行的 sql 语句操作是 insert, update, delete, 则使用 executeUpdate 方法执行, 返回值为影响数据的行数
 // 如果待执行的 sql 语句操作是 select, 则使用 executeQuery 方法执行
 int ret = statement.executeUpdate();

其中,如果待执行的 sql 语句操作是 insert, update, delete, 则使用 executeUpdate 方法执行,返回值为影响数据的行数,如果待执行的 sql 语句操作是 select, 则使用 executeQuery 方法执行,返回值是一个 ResultSet 结果表对象。

2.4 及时释放资源

第五步,释放资源,我们执行完毕 sql 语句后需要及时地将资源释放,在 JDBC 编程中,最常见需要释放的类或接口有三个,分别是 Connection,PreparedStatement,ResultSet,其中前面两个在 jdbc 插入操作中已经使用过了,而最后一个,即 ResultSet,它是在执行查询语句需要用到的,调用 executeQuery 方法执行查询语句之后,会返回一个“临时表”,该“临时表”上储存了查询的结果,我们可以通过遍历该结果表来获取查询数据库的结果。

// 此时 sql 语句已经执行完毕了,需要释放资源 statement.close();connection.close();

使用 jdbc 编程进行插入操作全部代码:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class TestJdbc { public static void main(String[] args) throws SQLException { DataSource dataSource = new MysqlDataSource();
 // 设置数据库所在地址
 ((MysqlDataSource)dataSource).setURL( jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8 useSSL=false 
 // 设置登录数据库的账户名
 ((MysqlDataSource)dataSource).setUser( root 
 // 设置登录数据库的密码
 ((MysqlDataSource)dataSource).setPassword( 123456 
 // 建立连接
 Connection connection = dataSource.getConnection();
 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  insert into student values(1,  张三) 
 // 将 sql 字符串包装成一个语句对象,表示待执行的 sql 的对象
 PreparedStatement statement = connection.prepareStatement(sql);
 // 执行 sql
 // 如果待执行的 sql 语句操作是 insert, update, delete, 则使用 executeUpdate 方法执行, 返回值为影响数据的行数
 // 如果待执行的 sql 语句操作是 select, 则使用 executeQuery 方法执行
 int ret = statement.executeUpdate();
 // 此时 sql 语句已经执行完毕了,需要释放资源
 statement.close();
 connection.close();
 }}

运行结果,我们通过查询数据库的表的结果来进行观察:

mysql  create database jdbctest;Query OK, 1 row affected (0.01 sec)mysql  use jdbctest;Database changed
mysql  create table student(id int, name varchar(20));Query OK, 0 rows affected (0.02 sec)mysql  show tables;+--------------------+| Tables_in_jdbctest |+--------------------+| student |+--------------------+1 row in set (0.00 sec)--  执行 jdbc 代码后查询 mysql  select * from student;+------+--------+| id | name |+------+--------+| 1 |  张三  |+------+--------+1 row in set (0.00 sec)

程序运行结果,表示 1 行受到了影响。

2.5 不要写死的代码(以插入为例)

我们发现我们的 sql 语句是完完全全写死的,这一点不好,我们可以使用输入的操作让用户输入信息进行插入,那就需要使用到 Scanner 类了。

我们得到用户输入的信息后,我们需要对信息进行整合,最容易想到的方式就是字符串拼接,但是这么做有如下的缺点,一是容易写错,特别是单双引号比较多的情况下,二是不安全,黑客可以使用 sql 注入的方式来修改数据库。

所以更好的方法就是把 sql 字符串中待输入的信息使用? 来代替或者叫做占位,然后通过 PreparedStatement 中的 setXXX 系列方法来逐个设置每个? 的内容是什么。

这个系列的方法,第一个参数表示 sql 待执行对象中第多少个?,第二个参数表示将这个? 设置的内容。比如:

 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  insert into student values(?, ?) 
 // 将 sql 字符串包装成一个语句对象,表示待执行的 sql 的对象
 PreparedStatement statement = connection.prepareStatement(sql);
 statement.setInt(1, id);
 statement.setString(2, name);

完整代码:jdbc 插入操作源代码

运行结果:
MySQL 数据库 JDBC 编程知识点有哪些
数据库查询结果:

mysql  select * from student;+------+--------+| id | name |+------+--------+| 1 |  张三  || 2 |  李四  |+------+--------+2 rows in set (0.00 sec)

2.6JDBC 删除,更新操作

在 jdbc 编程中,删除操作和更新操作,它的步骤与插入操作是一模一样的,只不过就是构造的 sql 语句不一样,其他都一样。

删除操作关键代码:

 // 用户输入
 System.out.println( 请输入需要删除的学号: int id = sc.nextInt();
 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  delete from student where id = ? 
 PreparedStatement statement = connection.prepareStatement(sql);
 statement.setInt(1, id);
 System.out.println(statement  + statement);

程序运行结果:
MySQL 数据库 JDBC 编程知识点有哪些

数据库查询结果:

mysql  select * from student;+------+--------+| id | name |+------+--------+| 1 |  张三  |+------+--------+1 row in set (0.00 sec)

更新操作关键代码:

 // 用户输入   需要修改的 id  与修改后的姓名
 System.out.println( 请输入需要修改的学号: int id = sc.nextInt();
 sc.nextLine();
 System.out.println( 请输入修改后的姓名: String afterName = sc.nextLine();
 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  update student set name = ? where id = ? 
 PreparedStatement statement = connection.prepareStatement(sql);
 statement.setString(1, afterName);
 statement.setInt(2, id);
 System.out.println(statement  + statement);

jdbc 更新操作完整代码:源代码地址

程序运行结果:

MySQL 数据库 JDBC 编程知识点有哪些

数据库查询结果:

mysql  select * from student;+------+--------+| id | name |+------+--------+| 1 |  王五  |+------+--------+1 row in set (0.00 sec)

2.7JDBC 查询操作

jdbc 的查询操作与插入删除更新操作有一点点不同,执行查询 sql 语句的时候是调用 executeQuery 方法来执行语句的,并且会带回查询的结果,我们可以通过类似与迭代器的操作来获取查询的结果,这个结果集使用完后需要将它释放。

关键代码:

 // 操作数据库   关键在于构造 sql 语句
 //jdbc  构造的 sql 语句不需要带上;
 String sql =  select * from student 
 PreparedStatement statement = connection.prepareStatement(sql);
 // 执行 sql  查询操作返回的不是 int  而是一个临时表   使用 ResultSet 对象表示这个临时表
 ResultSet ret = statement.executeQuery();
 // 便利结果集合
 // 预期结果格式 // +------+--------+// | id | name |// +------+--------+// | 1 |  王五  |// +------+--------+
 while (ret.next()) {
 int id = ret.getInt( id 
 String name = ret.getString( name 
 System.out.println(id:  + id +  , name:  + name);
 }
 // 关闭资源
 ret.close();
 statement.close();
 connection.close();

程序运行结果:
MySQL 数据库 JDBC 编程知识点有哪些

到此,相信大家对“MySQL 数据库 JDBC 编程知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计6606字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)