一、DriverManager
1、注册驱动
DriverManager.registerDriver(new Driver());
registerDriver方法是用于注册驱动的,但是我们之前做的入门案例并不是这样写的。而是如下实现
Class.forName("com.mysql.jdbc.Driver");
我们查询MySQL提供的Driver类,看它是如何实现的,源码如下:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
//JVM加载类时会执行静态代码块;每个静态代码块只会被执行一次。
在该类中的静态代码块中已经执行了 DriverManager
对象的 registerDriver()
方法进行驱动的注册了,那么我们只需要加载 Driver
类,该静态代码块就会执行。而 Class.forName("com.mysql.jdbc.Driver");
就可以加载 Driver
类。
==提示:==
MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
2、获取数据库连接
String url = "jdbc:mysql://localhost:3306/JDBCTest";
Connection connection = DriverManager.getConnection(url, "root", "123456");
参数说明:
-
url : 连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
细节:
-
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
-
配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
-
-
user :用户名
-
password :密码
二、Connection
1、获取执行对象
-
普通执行SQL对象
Statement statement = connection.createStatement();
-
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
2、事务管理
-
开启事务
connection.setAutoCommit(false);
MySQL默认是自动提交事务。
true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。
-
提交事务
connection.commit();
-
回滚事务
connection.rollback();
3、案例
package com.qianchen;
import java.sql.*;
/*
事务管理
*/
public class JDBCTest02 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/JDBCTest";
Connection connection = DriverManager.getConnection(url, "root", "123456");
String sql = "update `User` set `password`=110119 where `username`='李四'";
Statement statement = connection.createStatement();
try {
//开启事务
connection.setAutoCommit(false);
//执行sql
//int a = 3/0;//设置错误,检验 connection.rollback();
int i = statement.executeUpdate(sql);
System.out.println(i);
//提交事务
connection.commit();
}catch (Exception e){
//如果出现错误,就回滚事务
connection.rollback();
}
statement.close();
connection.close();
}
}
三、Statement
1、执行DDL、DML语句
int i = statement.executeUpdate(sql);
2、执行DQL语句
ResultSet resultSet = statement.executeQuery(sql);
四、ResultSet
ResultSet对象提供了操作查询结果数据的方法,如下:
boolean next()
将光标从当前位置向下移动一行
判断当前行是否为有效行
方法返回值说明:
true : 有效行,当前行有数据
false : 无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx : 数据类型;如: int getInt(参数) ;String getString(参数)
参数
int类型的参数:列的编号,从1开始。不是行的编号!!!
String类型的参数: 列的名称
案例
package com.qianchen;
import java.sql.*;
/*
ResultSet
*/
public class JDBCTest03 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/JDBCTest";
Connection connection = DriverManager.getConnection(url, "root", "123456");
String sql = "select * from `User`";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
/*
//数字代表列的编号,不是行的编号!!!
String username = resultSet.getString(1);
int password = resultSet.getInt(2);
System.out.println("username:"+username+"-->password:"+password);
*/
String username = resultSet.getString("username");
int password = resultSet.getInt("password");
System.out.println("username:"+username+"-->password:"+password);
}
resultSet.close();
statement.close();
connection.close();
}
}
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决