JDBC学习笔记【IDEA工具】
JDBC是什么?
JDBC(Java DataBase Connectivity) 称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。
开发第一个JDBC程序的单表CRUD
CRUD是指在做计算处理时的增加(Create)、重新取得数据(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。
1.准备环境
本段程序使用IDEA工具,连接MySQL数据库,使用Maven项目结构【点我学习Maven的下载与配置】
MySQL版本:5.5
数据库驱动Jar包版本:mysql-connector-java-5.1.17
- 创建一个数据库
drop database if exists `jdbctest`;
create database `jdbctest` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 创建一个数据库表
CREATE TABLE IF NOT EXISTS `user`(
`user_id` INT UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 插入一些数据
insert into user(username,password) values ('admin','123456');
insert into user(username,password) values ('weiney','111111');
2.在pom.xml文件中导入数据库连接依赖
<dependencies>
<!--数据库连接jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
</dependencies>
3.编写jdbc.properties配置文件
jdbc.properties配置文件:
- 包含数据库驱动Driver、数据库连接地址Url、数据库用户名User和数据库密码password
- 采用配置文件的方式是为了使代码有更好的健壮性,并且满足OCP原则【对扩展开放,对修改关闭】
- 该文件放到Resources目录下
- 关于driver
- 如果jdbc的jar包是5及5之前的数据库连接驱动名称:com.mysql.jdbc.Driver
- jdbc的jar包是6及6之后的数据库连接驱动名称:com.mysql.cj.jdbc.Driver
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:【端口号】/【数据库名称】
username=【用户名】
password=【密码】
4.编写JDBC工具类
在java目录下新建一个包:pers.weiney.utils
新建工具类:JdbcUtils.java
package pers.weiney.utils;
import java.sql.*;
import java.util.ResourceBundle;
/**
* @author Weiney
* @ToDo 简单的JDBC工具类
* @create 2022-11-21 16:06
*/
public class JdbcUtils {
// 属性资源文件绑定
private static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");//此处直接写配置文件的名称即可
// 根据属性配置文件key获取value
private static String driver = bundle.getString("driver");
private static String url = bundle.getString("url");
private static String username = bundle.getString("username");
private static String password = bundle.getString("password");
static {
// 注册驱动(注册驱动只需要注册一次,放在静态代码块当中。JdbcUtils类加载的时候执行。)
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
/**
* 获取数据库连接对象
* @return 数据库连接对象
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
// 获取连接
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
/**
* 释放资源
* @param conn 连接对象
* @param ps 操作对象
* @param rs 结果集
* @throws SQLException
*/
public static void close(Connection conn, Statement ps, ResultSet rs) {
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
5.编写测试类
在java目录下新建一个包:pers.weiney.dao.impl
新建简单测试类:JDBCTest.java
实现增删改查的具体6步骤:
- 获取数据库连接
- 定义SQL语句
- 获取预编译的数据库操作对象
- 执行SQL语句
- 对于从数据库获取数据【查】:
5. 执行SQL语句后会返回一个【结果集】,因此遍历结果集并输出- 对于修改数据库的数据【增、删、改】
5. 绑定参数【对于SQL语句中的参数】
6. 返回一个记录更改条数结果【1成功,0失败】
package pers.weiney.dao.impl;
import pers.weiney.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author Weiney
* @ToDo 测试数据库连接
* @create 2022-11-21 16:32
*/
public class JDBCTest {
static Connection conn = null;
static PreparedStatement ps = null;
static ResultSet rs = null;
public static void selectUser() {
try {
// 1.获取连接
conn = JdbcUtils.getConnection();
// 定义SQL语句
String sql = "select username,password from user";
// 2.获取预编译的数据库连接对象
ps = conn.prepareStatement(sql);
// 3.执行SQL语句:此处为查找语句,会返回结果集
rs = ps.executeQuery();
// 4.有结果集则遍历
while (rs.next()) {
String username = rs.getString("username");
String password = rs.getString("password");
System.out.println("Username = " + username + " Password = " + password);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, ps, rs);
}
}
public static void updateUser() {
// 更新操作返回结果
int count = 0;
try {
conn = JdbcUtils.getConnection();
// 增、删、改除了sql语句不同,其他都一样,都不会返回结果集
String sql = "insert into user(username,password) values(?,?)";
ps = conn.prepareStatement(sql);
// 增删改操作需要绑定数据
ps.setString(1, "TestAdd");
ps.setString(2, "111111");
count = ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JdbcUtils.close(conn, ps, null);
}
if (count == 1) {
System.out.println("更新了【" + count + "】条数据");
}
}
public static void main(String[] args) throws SQLException {
// 查
selectUser();
// 更新操作(增、删、改)
updateUser();
}
}
关于JDBC技术的个人看法
在我看来,这项技术也是比较繁琐的,给SQL语句绑定参数,获取参数的值等,有大量重复的语句,并且在实际开发中,如果数据库的表结构发生改变,则需要修改Java代码。
SSM三大框架中的MyBatis则对数据库的操作进行了更好的封装,关于MyBatis在我的另一个博客MyBatis学习笔记中有介绍。
关于本文是个人的学习笔记总结,如有错误,感谢指正。