Java中的JDBC操作详解、JDBC工具类的编写以及DBUtils工具包的使用
文章目录
- 一、JDBC概述
- 二、JDBC语句
- 1、JDBC流程
- 2、JDBC中DML语句
- 3、JDBC中DQL语句
- 三、JDBC工具类编写
- 1、编写Properties配置文件
- 2、编写JDBC工具类
- 四、DBUtils工具包
- 1、BeanHandler
- 2、BeanListHandler
- 3、ScalarHandler
一、JDBC概述
Java DataBase Connectivity: Java 数据库连接技术
通过Java语言操作数据库,是sun公司定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套接口,提供数据库驱动jar包
二、JDBC语句
1、JDBC流程
- 注册驱动(可以省略)
- 获取数据库连接对象 Connection
- 定义sql
- 获取执行sql语句的对象 Statement
- 执行sql,接收返回结果
- 处理结果
- 释放资源
执行时会出现时区问题:
解决方案:
?serverTimezone=Asia/Shanghai
2、JDBC中DML语句
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Code01{
public static void main(String[] args) throws Exception{
// 1. 注册驱动(安转驱动) 此时这句话可以省略 如果书写的话,mysql8.0 带 cj
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取数据库连接对象 Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2?serverTimezone=Asia/Shanghai","root","root");
// 3. 定义sql语句
String sql = "insert into dept values(1,'咨询部','杭州')";
// 4. 获取执行sql语句的对象 Statement
Statement statement = conn.createStatement();
// 5. 执行sql
boolean result = statement.execute(sql);
// 6. 处理结果
System.out.println(result);
// 7. 释放资源
statement.close();
conn.close();
}
}
3、JDBC中DQL语句
import java.sql.*;
public class Code02 {
public static void main(String[] args) throws Exception {
// 注册驱动(省略了)
// 获取连接
Connection coon = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb03", "root", "root");
// 定义sql语句
String sql = "select * from dept";
// 获取执行sql语句的对象 preparedStatement
PreparedStatement preparedStatement = coon.prepareStatement(sql);
//获取查询结果
ResultSet resultSet = preparedStatement.executeQuery();
//处理结果 循环打印
while (resultSet.next()){
int dept_id = resultSet.getInt("dept_id");
String name = resultSet.getString("name");
String local = resultSet.getString("local");
System.out.println(dept_id + "\t" + name + "\t" + local);
}
//关闭连接
preparedStatement.close();
coon.close();
}
}
三、JDBC工具类编写
1、编写Properties配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb03?serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=root
2、编写JDBC工具类
import java.sql.*;
import java.util.ResourceBundle;
public class JdbcUtils {
private static String driver = null;
private static String url = null;
private static String user = null;
private static String password = null;
private static Connection conn = null;
// 静态代码块在该类被加载的时候只执行一次
static {
// 读取properties配置文件中的内容
ResourceBundle db = ResourceBundle.getBundle("db");
driver = db.getString("jdbc.driver");
url = db.getString("jdbc.url");
user = db.getString("jdbc.user");
password = db.getString("jdbc.password");
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
// 对外部使用的 用来得到Connection对象方法
public static Connection getConn() {
return conn;
}
//关闭所有对象方法
public static void close(ResultSet resultSet, PreparedStatement statement, Connection connection) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四、DBUtils工具包
DbUtils给我们提供了10个ResultSetHandler实现类,分别是:
- ArrayHandler: 将查询结果的第一行数据,保存到Object数组中
- ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
- BeanHandler 将查询结果的第一行数据,封装到user对象
- BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
- ColumnListHandler 将查询结果的指定列的数据封装到List集合中
- MapHandler 将查询结果的第一行数据封装到map结合
- MapListHandler 将查询结果的每一行封装到map集合,再将map集合存入List集合
- BeanMapHandler 将查询结果的每一行数据,封装到User对象,再存入map集合中
- KeyedHandler 将查询的结果的每一行数据,封装到map1,然后将map1集合(多个)存入map2集合(一个)
- ScalarHandler 封装类似count、avg、max、min、sum…函数的执行结果
常用的是BeanHandler、BeanListHandler和ScalarHandler
1、BeanHandler
public class Code06 {
public static void main(String[] args) throws SQLException {
Connection conn = JdbcUtils.getConn();
QueryRunner queryRunner = new QueryRunner();
String sql = "select * from users";
// 将查询结果的第一行数据,封装到user对象
Users query = queryRunner.query(conn, sql, new BeanHandler<Users>(Users.class));
System.out.println(query);
}
}
// 运行结果:Users{userName = zhangsan, password = 123456}
2、BeanListHandler
public class Code07 {
public static void main(String[] args) throws SQLException {
Connection conn = JdbcUtils.getConn();
QueryRunner queryRunner = new QueryRunner();
String sql = "select * from users";
// BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
List<Users> query = queryRunner.query(conn, sql, new BeanListHandler<Users>(Users.class));
System.out.println(query);
}
}
// 运行结果:[Users{userName = zhangsan, password = 123456}, Users{userName = lisi, password = 123123}, Users{userName = 陈嘉豪, password = 123124}]
3、ScalarHandler
public class Code08 {
public static void main(String[] args) throws SQLException {
Connection conn = JdbcUtils.getConn();
QueryRunner queryRunner = new QueryRunner();
String sql = "select count(*) from users";
Object query = queryRunner.query(conn, sql, new ScalarHandler());
System.out.println(query);
}
}
// 运行结果:3