JDBC
想要通过Java程序操作关系型数据库,就需要使用JDBC(Java DataBase Connectivity),JDBC就是使用Java程序操作关系型数据库的一套API(Java官方提供的)。很多高级的操作数据库的框架(如MyBatis、MyBatisPlus等)底层都是基于JDBC的,是对JDBC的高级封装;所以说了解原生的JDBC的操作是十分重要的。
Java官方只是提供了JDBC的规范(接口),并没有对其进行实现,而是将JDBC的实现交给了各个数据库厂商(如MySQL,Oracle等),因为各个不同的关系型数据库的底层细节是各个厂商最清楚的。各个厂商提供的JDBC实现也被称为数据库驱动,我们在使用JDBC的时候需要根据数据库类型,引入厂商实现的jar包。
快速入门
1.准备工作:创建Maven项目,根据使用的数据库,在pom.xml引入对应厂商的数据库驱动(不同厂商对于JDBC的实现)依赖,并且准备一个数据库表用于操作。 2.编写JDBC程序,操作数据库表。
准备
因为用的是Maven构建项目,直接引入mysql实现的JDBC的坐标即可
数据库建表、数据:
create table user(id int unsigned primary key auto_increment comment 'ID,主键',username varchar(20) comment '用户名',password varchar(32) comment '密码',name varchar(10) comment '姓名',age tinyint unsigned comment '年龄'
) comment '用户表';insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),(2, 'xiaoqiao', '123456', '小乔', 18),(3, 'diaochan', '123456', '貂蝉', 24),(4, 'lvbu', '123456', '吕布', 28),(5, 'zhaoyun', '12345678', '赵云', 27);
JDBC实现DQL语句
编写代码,操作数据库表,实现对数据的更改(此处更新id为1的用户的年龄)
package com.wzb;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCQuickStart {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 注册驱动,本质上是将驱动类加载到内存中,这一步是为了告诉程序用的是什么数据库Class.forName("com.mysql.cj.jdbc.Driver");// 获取数据库连接String url = "jdbc:mysql://localhost:3306/db01";String username = "root";String password = "123456";Connection connection = DriverManager.getConnection(url, username, password);// 获取SQL语句执行对象Statement statement = connection.createStatement();// 在SQL语句执行对象中执行SQL语句 statement:声明、报告、语句 execute:执行、实施statement.executeUpdate("update user set age = 20 where id = 1");// 处理完成后释放资源statement.close();connection.close();}
}
运行代码,发现数据成功被更改了。
增删改在数据库的操作中都是属于DML语句,都可以使用Statement类中的executeUpdate方法,在方法中书写SQL语句从而达到修改的目的,而数据库中的DQL(查询语句)则不属于executeUpdate中的类别,DQL属于executeQuery,需要使用executeQuery方法进行查询。
JDBC实现DQL语句
在Java程序中对数据库进行查询操作,一般是为了将查询到的数据封装为对象,便于后续处理和响应前端,封装成对象时,对象的属性必须和数据库中的字段完全一致:
package com.wzb;import com.wzb.pojo.User;
import org.junit.Test;import java.sql.*;/*** JDBC查询数据库的用户信息并封装到User对象中*/
public class JDBCQueryTest {@Testpublic void query() throws ClassNotFoundException, SQLException {String url = "jdbc:mysql://localhost:3306/db01";String username = "root";String password = "123456";// 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 创建连接Connection connection = DriverManager.getConnection(url, username, password);String sql = "select id, username, password, name, age from user where username = ? and password = ?";// 这是预编译的SQLPreparedStatement statement = connection.prepareStatement(sql);// 通过Statement中的setString来对预编译的SQL中的占位符进行赋值statement.setString(1, "daqiao");statement.setString(2, "123456");// 得到查询的集合ResultSetResultSet resultSet = statement.executeQuery();// 遍历结果集合并进行封装while (resultSet.next()) {User user = new User(resultSet.getInt("id"),resultSet.getString("username"),resultSet.getString("password"),resultSet.getString("name"),resultSet.getInt("age"));System.out.println(user);};// 释放资源statement.close();connection.close();}
}
成功查询并封装为User实体对象: