文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
如有侵权请联系本人
邮箱:xiaogueika@tom.com
一、JDBC 概述
1. 什么是JDBC(Java 访问数据库的标准规范)
JDBC(Java Data Base Connectivity) ,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是 Java 访问数据库的标准规范
总结:
JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。
二、JDBC开发(MySql)
1. MySql驱动包
这一步都不会的话参考百度:idea导入驱动包
2.1 API使用: 注册驱动
JDBC规范定义驱动接口: java.sql.Driver
MySql驱动包提供了实现类: com.mysql.jdbc.Driver
加载注册驱动的方式 | 描述 |
---|---|
Class.forName (数据库驱动实现类) | 加载和注册数据库驱动,数据库驱动由数据库厂商MySql提供com.mysql.jdbc.Driver |
代码示例:
public class JDBCDemo01 {
public static void main(String[] args) throws ClassNotFoundException {
//1.注册驱动
// forName 方法执行将类进行初始化
Class.forName("com.mysql.jdbc.Driver");
}
}
应该没人会弱智到问我为什么要注册驱动吧,暂时我先不写,如果真的需要的话,请私信我添加。
个人感觉JDBC这块,会用就够了。
2.2 API使用: 获得连接
Connection
接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现- 使用
DriverManager
类的静态方法,getConnection
可以获取数据库的连接
获取连接的静态方法 | 说明 |
---|---|
Connection getConnection(String url, String user,String password) | 通过连接字符串和用户名,密码来获取数据库连接对象 |
-
getConnection方法 3个 连接参数说明
连接参数 说明 user 登录用户名 password 登录密码 url mySql URL的格式 jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8
-
对URL的详细说明
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。-
第一部分是协议 jdbc,这是固定的;
-
第二部分是子协议,就是数据库名称,连接mysql数据库,第二部分当然是mysql了;
-
第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost),端口号(3306),以及要使用的数据库名称组成。
代码示例:public class JDBCDemo02 { public static void main(String[] args) throws Exception { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 Connection 连接对象 tring user = "root"; //账户 String password = "root"; //密码 String url = "jdbc:mysql://localhost:3306/db4"; Connection con = DriverManager.getConnection(url, user, password); //com.mysql.jdbc.JDBC4Connection@2e3fc542 System.out.println(con); } }
-
2.3 API 使用: 获取语句执行平台
- 通过
Connection
的createStatement
方法 获取sql语句执行对象
Connection接口中的方法 | 说明 |
---|---|
Statement createStatement() | 创建 SQL语句执行对象 |
Statement
: 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。
Statement类 常用方法 | 说明 |
---|---|
int executeUpdate(String sql); | 执行insert update delete 语句.返回int类型,代表受影响的行数 |
ResultSet executeQuery(String sql); | 执行select 语句, 返回ResultSet 结果集对象 |
代码示例:
/*----------------------------------前面代码补充上----------------------------------*/
//3.获取语句执行平台 Statement 对象
Statement statement = con.createStatement();
//4.执行创建表操作
String sql = "create table test(id int,name varchar(20),age int)";
//5.增删改操作 使用executeUpdate,增加一张表
int i = statement.executeUpdate(sql);
//6.返回值是受影响的函数
System.out.println(i);
//7.关闭流
statement.close();
con.close();
2.4 API 使用:处理结果集(ResultSet
)
只有在进行查询操作的时候, 才会处理结果集
ResultSet接口
作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。
ResultSet接口方法 | 说明 |
---|---|
boolean next() | 1) 游标向下一行 2) 返回 boolean 类型,如果还有下一条记录,返回 true ,否则返回 false |
xxx getXxx( String or int) | 1) 通过列名,参数是 String 类型。返回不同的类型2) 通过列号,参数是整数,从 1 开始。返回不同的类型 |
代码示例:
package com.cyh.demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
public class JDBCDemo02 {
public static void main(String[] args) throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接 connection连接对象
String user = "root"; //账户
String password = "root"; //密码
String url = "jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8"; //url
Connection con = DriverManager.getConnection(url, user, password);
//3.获取语句执行平台 Statement 对象
Statement statement = con.createStatement();
//4.执行查询操作
String sql = "select * from jdbc_user;";
//5.查询操作 使用executeUpdate,增加一张表
ResultSet resultSet = statement.executeQuery(sql);
//6.返回值是受影响的函数
while(resultSet.next()){
//获取id
int id = resultSet.getInt("id");
//获取姓名
String username = resultSet.getString("username");
//获取生日
Date birthday = resultSet.getDate("birthday");
System.out.println(id + " = " + username + " : " + birthday);
}
//7.关闭流
statement.close();
con.close();
}
}
2.6 步骤总结
- 获取驱动(可以省略)
- 获取连接
- 获取Statement对象
- 处理结果集(只在查询时处理)
- 释放资源(被我吃了(不想写))
二、JDBC实现增删改查
1. 创建JDBC工具类
package com.cyh.utils;
import java.sql.*;
/**
* JDBC 工具类
*/
public class JDBCUtils {
/**
* 将连接信息定义为字符串常量
*/
/**
* 驱动类
*/
public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
/**
* URL
*/
public static final String URL = "jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8";
/**
* 数据库账号
*/
public static final String USER = "root";
/**
* 数据库密码
*/
public static final String PASSWORD = "root";
/**
* 静态代码块,随着类的加载而加载
* 注册驱动
*/
static {
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接的静态方法
* @return Connection
*/
public static Connection getConnection(){
try {
//获取连接对象 并返回
return DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 增删改的关闭资源的方法
* @param con
* @param statement
*/
public static void Close(Connection con, Statement statement){
if (null != statement){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != con){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 查询操作的关闭资源的方法
* @param con
* @param statement
* @param resultSet
*/
public static void Close(Connection con, Statement statement, ResultSet resultSet){
if (null != resultSet){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != statement){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != con){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2. 增删查改示例:
package com.cyh.jdbc02;
import com.cyh.utils.JDBCUtils;
import org.junit.Test;
import java.sql.*;
public class TestDML {
/**
* 添加操作
* @throws SQLException
*/
@Test
public void testInsert() throws SQLException {
//1.通过过JDBCUtils工具类获取连接
Connection con = JDBCUtils.getConnection();
//2.获取Statement对象
Statement statement = con.createStatement();
//2.1 编写SQL
String sql ="insert into jdbc_user values(null,'石头','123','2021/02/04')";
int i = statement.executeUpdate(sql);
System.out.println(i);
//3. 关闭流
JDBCUtils.Close(con,statement);
}
/**
* 修改操作
* @throws SQLException
*/
@Test
public void testUpdate() throws SQLException {
//1.通过过JDBCUtils工具类获取连接
Connection con = JDBCUtils.getConnection();
//2.获取Statement对象
Statement statement = con.createStatement();
//2.1 编写SQL
String sql ="update jdbc_user set username = '九渊' where id = 1";
int i = statement.executeUpdate(sql);
System.out.println(i);
//3. 关闭流
JDBCUtils.Close(con,statement);
}
/**
* 删除操作
* @throws SQLException
*/
@Test
public void testDelete() throws SQLException {
//1.通过过JDBCUtils工具类获取连接
Connection con = JDBCUtils.getConnection();
//2.获取Statement对象
Statement statement = con.createStatement();
//2.1 编写SQL
String sql ="delete from jdbc_user where username = '石头'";
int i = statement.executeUpdate(sql);
System.out.println(i);
//3. 关闭流
JDBCUtils.Close(con,statement);
}
/*--------------------------------------DQL-------------------------------------------*/
/**
* 查询操作
* @throws SQLException
*/
@Test
public void testSelect() throws SQLException {
//1.通过过JDBCUtils工具类获取连接
Connection con = JDBCUtils.getConnection();
//2.获取Statement对象
Statement statement = con.createStatement();
//2.1 编写SQL
String sql ="select * from jdbc_user";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
Date birthday = resultSet.getDate("birthday");
System.out.println(id + "\t" + username + "\t" + birthday);
}
//3. 关闭流
JDBCUtils.Close(con,statement,resultSet);
}
}