JDBC(Java DataBase Connectivity)–Java数据库连接
JDBC(一套标准接口)
流程:
1、工程下导入数据库驱动文件
2、注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
3、连接数据库
DriverManager.getConnection(URL,user,password)
4、编写SQL语句
5、把SQL语句发给数据库
6、处理SQL执行SQL返回结果
7、释放资源
package com.example;
//通过junit替代Main方法进行单元测试
import org.junit.Test;
import java.sql.*;
public class QuickStart {
@Test
public void test() throws ClassNotFoundException, SQLException {
//1、注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2、连接数据库
String url = "jdbc:mysql://localhost:3306/db4";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
//3、编写SQL代码
String sql = "select id,username,password from user";
//4、把SQL语句发给数据库(执行SQL语句)通过连接创建操作数据库的对
Statement statement = connection.createStatement();
//4.1返回为一个结果集
ResultSet resultSet = statement.executeQuery(sql);
//5、处理结果,遍历结果集
while(resultSet.next()){
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String pwd = resultSet.getString("password");
System.out.println(id+","+username+","+pwd);
System.out.println("================================");
}
//6、释放资源(断开和数据库的连接)
connection.close();
statement.close();
resultSet.close();
}
}
JDBC的API解释:
1、DriverManager:驱动管理类–》MySQL5之后的驱动包可以省略注册驱动的步骤
1)注册驱动:DriverManager.registerDriver(new Driver());
由于这句代码在Driver类的静态方法中所以在Driver类加载的时候自动注册
2)获取连接
Connection—》getConnection(url,user,password)
url:jdbc:mysql://ip地址(域名):端口号/要连接的数据库名称?参数键值对
MySQL8.0的一般通过下面的URL进行数据库的连接:
jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf8
(
useUnicode=true&characterEncoding=utf8
)-->防止出现乱码
user:root
password:****
2、Connection数据库连接对象
1)创建执行SQL的对象
Statement stmt=Connection.createStatement()
2)事务管理
开启事务(即相当于设置一个手动提交事务):
Connection.setAutoCommit(false)—>相当于MySQL中的 Start transaction;开启事务
提交事务:
Connection.commit()—>相当于MySQL中的commit;提交事务
回滚事务:
Connetion.rollback()—>相当于MySQL中的rollback;回滚事务
3、Statement对象:
发送SQL语句到数据库执行,回收执行结果为一个结果集(resultSet)
它对应的SQL操作方法:
- executeQuery:用于执行返回单个结果集(resultSet)的语句,例如 SELECT 语句。
- executeUpdate:用于执行 INSERT、UPDATE 或 DELETE—DML 语句,以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。DML语句它返回一个整数,指示受影响的行数。DDL语句返回为0的时候为成功
- execute:用于执行返回多个结果集、多个更新计数或两者组合的语句。
4、resultSet结果集对象(开始的时候指向结果集中的第一个元素)
结果集和select语句执行成功之后的表一样,所以如果在select语句中有取别名的操作的时候,
获取数据的值为别名
select id,username as name from user;
resultSet.getString(“name”)—>这里必须写name,而不能写原有的字段名username
不同类型SQL执行成功的条件
DML:row>0
DDL:row=0
DQL:rs.next()为真
登录综合案例:
public class LoginTest {
// 登录测试
@Test
public void loginTest() throws ClassNotFoundException, SQLException {
//1、注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2、连接数据库
final String RUL = "jdbc:mysql://127.0.0.1:3306/db4?useUnicode=true&characterEncoding=utf-8";
final String USER = "root";
final String PASSWORD = "123456";
Connection conn = DriverManager.getConnection(RUL, USER, PASSWORD);
//3、编写SQL语句
String username = "zhangsan";
String password = "123";
String sql = "select username,password" +
" from user " +
"where username='" + username + "' and password='" + password + "'";
//4、执行SQL语句
// 4.1、获取操作数据库的对象
Statement statement = conn.createStatement();
//4.2、执行SQL语句
ResultSet resultSet = statement.executeQuery(sql);
//5、处理结果
if (resultSet.next()){
//获取结果集中的用户名,密码进行对比
String usernameDB = resultSet.getString("username");
String passwordDB = resultSet.getString("password");
if (username.equals(usernameDB) && password.equals(passwordDB)){
System.out.println("恭喜"+username+"登录成功");
}else {
System.out.println("用户名或密码错误");
}
}
//6、关闭资源从下往上依次关闭
resultSet.close();
statement.close();
conn.close();
}
}
**自定义JDBC工具类 **
//书写工具类的步骤:
/*
1、私有构造方法
2、提供静态方法
*/
工具类(JDBC的工具类)
//书写工具类的步骤:
/*
1、私有构造方法
2、提供静态方法
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcUtil {
private static final String URL = "jdbc:mysql://localhost:3306/db4";
private static final String USER = "";
private static final String PWD = "";
//注册驱动,只需要注册一次所以将其放在静态代码块中,在类加载的时候就执行
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//数据库连接
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(URL, USER, PWD);
return connection;
}
//释放资源
public static void release(Connection connection,java.sql.Statement statement,java.sql.ResultSet resultSet){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}