MySQL数据库,JDBC连接数据库操作流程详细介绍
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
前言
在学完 MySQL 和 Java 后我们通常会尝试使用 Java编译器 连接 MySQL数据库从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识因此我把 JDBC 包的下载及导入流程以及 JDBC 的使用流程整理下来分享给大家。
目录
1. 啥是JDBC
JDBC 翻译中文为 Java数据库连接通俗的来讲JDBC 就是能使 Java 连接关于数据库的一个API。这个 API 是由 java.sql.* 和 jva.sql.* 包中的接口和类组成的。
API在此做个简单的介绍有的人认为它是一个接口可以这样去说更好的理解为它是多个特定模块封装起来的一个功能包。而在本文中 JDBC 就是 Java 操纵数据库的一个API。
2. JDBC依赖包
在使用 JDBC 之前我们必需把依赖包 mysql-connector-java-5.1.47.jar 导入到 Java 项目中。依赖包的获取方式GitHub、MySQL官网、maven仓库。但 GitHub 有些慢MySQL官网不好找因此推荐在 maven仓库 中下载。
上述依赖包的版本号5.1.47以大版本号为主小版本号无所谓。什么意思就是你下载的MySQL版本是 5 你就下载依赖包以 5 开头的版本至于是5.几都可以。
2.1 依赖包下载流程
第一步浏览器搜索maven仓库。
第二步在搜索框搜索 mysql 并进入MySQL Connector Java。
第三步进入MySQL Connector Java后找到 5 开头的版本。为啥呢你下载的MySQL是版本几就下版本几。因为博主用MySQL是 5 版本的因此下载 5 开头的都行。
第四步进入MySQL Connector Java 》5.1...后点击jar下载即可。
2.2 导入依赖包
下载好依赖包后我们直接把依赖包 mysql-connector-java-5.1.47 复制并粘贴到Java项目当中具体操作流程如下:
第一步将下载好的.jar文件复制。
第二步将复制好的 mysql-connector-java-5.1.47.jar 文件粘贴至创建好的项目当中以项目中出现该.jar文件为准代表粘贴成功。
第三步右击粘贴好的 mysql-connector-java-5.1.47.jar 文件修改为Libray。点击Add as Library即可。
第四步mysql-connector-java-5.1.47.jar 文件下出现三个子目录代表着导入成功。
在把依赖包导入到项目当中后我们就能安心的使用 JDBC 进行编程了。下面我就来讲解关于 JDBC 的使用方法。
3. JDBC常用的接口和类
在JDBC常用的接口和类这节讲解中大家很多地方可能第一时间不能够很好的理解。建议跳过先看4. JDBC的使用后在回来看这一小节。
3.1 Connection接口
数据库连接 接口即 Connection 接口实现类是由数据库提供的获取到Connection对象的最合适的方法为:
是通过DataSource数据源对象来获取如下代码的展示:
//实例化MysqlDataSource对象向上转型
DataSource datasource = new MysqlDataSource();
((MysqlDataSource) datasource).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) datasource).setUser("root");
((MysqlDataSource) datasource).setPassword("填你的密码");
//创建来连接数据库
Connection connection = datasource.getConnection();
以上代码就是连接Java连接数据库的操作。具体的实现的原理在下方4. JDBC的使用中有详细介绍。
解释:
DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接这些连接是可以复用的每次使用完数据库连接释放资源调用 connection.close() 都是将Conncetion连接对象回收。
3.2 Statement对象
Statement对象是将SQL语句发送到数据库中。JDBC 这个 API 中提供了三种Statement对象
(1)Statement对象
- 用于执行不带参数的简单SQL语句
(2)PreparedStatement对象
- 用于执行带或者不带参数的SQL语句
- SQL语句会编译在数据库系统
- 执行速度快于Statement对象
(3)CallableStatement对象
- 用于执行数据库存储过程的调用
综上所述我们在实际开发中最常用的就是 PreparedStatement对象 。 因此我们在实例化PreparedStatement对象时一般这样操作:
PreparedStatement statement = connection.prepareStatement(sql);
在上述代码中connection为Connection类型的引用prepareStatement方法则是把Java编写的SQL语句传入MySQL数据库。
3.3 ResultSet对象
ResultSet里的数据一行一行排列每行有多个字段并且有一个记录指针指针所指的数据行叫做当前数据行我们只能来操作当前的数据行。我们如果想要取得某一条记录就要使用ResultSet的 next() 方法 ,如果我们想要得到 ResultSet 里的所有记录就应该使用 while 循环。
如下图所示next方法 第一次获取第一行数据第二次获取第二行数据直到最后没有数据了 while 循环结束。
executeQuery()方法 会把数据库响应的查询结果存放在 ResultSet对象 中供我们使用。
语法为ResultSet 引用名 = new PreparedStatement类型的引用.executeQuery();因此可以这样去写代码:
PreparedStatement statement = connection.prepareStatement(sql);//把sql语句传入数据库
String sql = "select * from student";//写入sql语句
ResultSet resultSet = statement.executeQuery();//实例化Resultset类型的对象
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = "+id+" name = "+name);
}//遍历表中信息
在对结果集进行遍历的时候while循环里面的参数是根据数据表中字段来确定的。如果数据表里面的字段有intvarchar 这两个类型那么我们就使用 getInt方法、getString方法 来分别获取这两个字段。当然必需得是 ResultSet类型 的引用。如果表中数据是其他类型则按照 getXXX方法 来获取即可。
4. JDBC的使用
在了解到了 JDBC 的常见接口与对象后我们就可以使用 JDBC 来进行编程了。JDBC 的使用步骤如下:
- 创建并初始化一个数据源
- 与数据库服务器建立连接
- 构造 SQL 语句
- 执行 SQL 语句
- 遍历结果集
- 释放必要的资源
首先我们在数据中创建一个名为 test 的数据库并在该数据库中创建一个名为 student 的表:
//创建test数据库
mysql> create database test charset utf8;
Query OK, 1 row affected (0.00 sec)
//使用test数据库
mysql> use test;
Database changed
//创建student表
mysql> create table student(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.02 sec)
//查询全表内容
mysql> select * from student;
Empty set (0.00 sec)
此时的 student 表中没有任何数据下方我们来通过 JDBC 编程使 student 增添数据。
4.1 创建并初始化数据源
MysqlDataSource 是 MySQL的数据源因此我们得实例化一个 MysqlDataSource 。
当然我们一般使用 DataSource类 来实例化 MysqlDataSource因此会进行向上转型效果。
DataSource dataSource = new MysqlDataSource();//向上转型
为啥不直接使用 MysqlDataSource类型 来实例化呢这样去理解DataSource类里面有的方法DataSource类的引用能够使用用MysqlDataSource里面有的方法DataSource类型的引用也能够用。因此我们宁愿向上转型。
4.2 与数据库服务器建立连接
Java 与 MySQL数据 连接的URL参数格式如下
- jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
万能的URLjdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false
以上的URL大家可以直接复制粘贴使用即可唯一需要更改的是数据库名。把 test 更改为你所要操作的数据库。如下方连接我创建的 test 数据库。
以下为与数据库服务器建立连接代码及解释:
DataSource dataSource = new MysqlDataSource();//向上转型
//数据库来源
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
//账户
((MysqlDataSource)dataSource).setUser("root");
//密码
((MysqlDataSource)dataSource).setPassword("你的密码");
//与数据进行连接
Connection connection = dataSource.getConnection();
在 dataSource 使用的方法中:
- setUrl 是表明MySQL数据库的来源
- setUser 是表明MySQL数据库的账号(下载时的账号默认为root)
- setPassword 是MySQL数据库密码
除了URL中的数据库不确定外账号、密码就是你下载MySQL数据库时你设置的MySQL账号和密码相信大家都还记得。
4.3 构造sql语句
静态的构造方法:
构造sql语句我们使用 String 类型的变量来初始化 sql 语句。初始化好的变量我们直接通过 prepareStatement 这个方法把该变量传入数据库中这样数据库拿到的就是一条 sql 语句了。
//静态构造sql语句
String sql = "insert into student value(101,'张三')";//插入sql语句
通过上方代码大家乍一看。这不是在 Java 编译器里面写 SQL 语句吗没错其实 JDBC 编程就是通过在 Java 编译器里面引入一些 SQL 语句来达到操作数据库的效果。
动态构造方法
当然以上的写法是把 sql语句 固定死了这样在就不能与用户达到交流。因此我们可以通过键盘输入来达到动态输入效果。
//动态构造sql语句
Scanner scanner = new Scanner(System.in);
String sql = "insert into student value(?,?)";
System.out.println("请输入id:");
int id = scanner.nextInt();
System.out.println("请输入name:");
String name = scanner.next();
statement.setInt(1,id);
statement.setString(2,name);
通过键盘输入我们需要将value里面的值替换为?号再通过对应的set方法来进行对应值的输入。在我的 student 表中
4.4 执行sql语句
通过 prepareStatement方法 把sql语句发送到数据库中当然我们得使用 Connection类型 的引用来调用 prepareStatement方法。
//通过prepareStatement方法把sql语句发送到数据库
PreparedStatement statement = connection.prepareStatement(sql);
4.5 遍历结果集
遍历结果按照ResultSet类型下的executeQuery方法来获取在使用next()方法来达到遍历。在上方 3.3ResultSet类 中讲解到了因此可以写出以下代码:
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = "+id+" name = "+name);
}
4.6 释放资源
释放按照先进后出的顺序进行释放什么意思呢先执行的方法我们先进行释放后执行的方法我们后释放按照栈的顺序先进后出。
//通过close方法释放必要的资源
statement2.close();
statement1.close();
connection.close();
为啥要释放资源在 Java 连接 MySQL数据库 并且传 SQL语句 时占用着内存中的空间。如果我们不使用 close方法 进行关闭连接的状态将一直保持着占用资源的状态因此我们得释放这些连接。
4.7 最终效果展示
JDBC的 6 个步骤展示
public static void main(String[] args) throws SQLException {
//1.创建并初始化数据源
DataSource dataSource = new MysqlDataSource();
//2.与数据库服务器建立连接
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root(填你自己的账号)");
((MysqlDataSource)dataSource).setPassword("我的密码(填你自己的密码)");
Connection connection = dataSource.getConnection();
//3.构造sql语句
String sql1 = "insert into student values(101,'张三'),(102,'李四'),(103,'王五')";
String sql2 = "select * from student;";
//4.执行sql语句
PreparedStatement statement1 = connection.prepareStatement(sql1);
PreparedStatement statement2 = connection.prepareStatement(sql2);
int ret = statement1.executeUpdate();
System.out.println("修改了"+ret+"条信息");//显示修改信息
//5.遍历结果集
ResultSet resultSet = statement2.executeQuery();
System.out.println("Student表信息:");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = "+id+" name = "+name);
}
//6.释放资源
statement2.close();
statement1.close();
connection.close();
}
Java编译器输出:
MySQL窗口显示:
上述代码中的 executeUpdate方法 具体实现效果如下:
- executeUpdate的返回值是一个整数指受影响的行数即更新计数
- 对于create table或drop table等不操作行的语句executeUpdate的返回值为零
作者程序猿爱打拳Java领域新星创作者阿里云社区博客专家。
️文章收录于MySQL数据库
️JavaSE的学习JavaSE
️数据结构的学习: 数据结构与算法
本片博文到这里就结束了如有收获还请给博主点个小小的关注感谢您的支持~