1.JDBC连接MySQL数据库
- 注册驱动
- 获取数据库连接对象Connection
- 定义sql语句
- 获取sql执行对象
- 执行sql
- 处理结果
- 释放资源
1 | public class jdbcdemo1 { |
2.详解各个对象
2.1 DriverManager
驱动管理对象
注册驱动
DriverManager类中有一个静态成员方法:static void registerDriver(Driver driver):注册给定的驱动程序DriverManager
Class.forName(“com.mysql.cj.jdbc.Driver”); 这行代码会将com.mysql.cj.jdbc.Driver在源代码阶段加载进内存,自动执行其中包含的静态代码块,其核心就是执行DriverManager.registerDriver(new Driver());注册驱动。
1
2
3
4
5
6
7
8
9
10
11
12
13// com.mysql.cj.jdbc.Driver
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
// 静态代码块
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}- 在jdbc驱动包下有一个文件java.sql.Driver,里面写入了com.mysql.cj.jdbc.Driver,程序会自动注册驱动,所以不执行Class.forName(“com.mysql.cj.jdbc.Driver”); 也可以。
DriverManager类中有一个获取数据库连接对象的方法:getConnection,是静态方法,可以通过类名直接调用。
static Connection getConnection(String url,Sptring user,String password);
url:指定连接的路径
jdbc:mysql://ip地址(域名):端口号/数据库名称?&useSSL=false&serverTimezone=GMT%2B8
2.2 Connection
获取执行sql语句的对象
- Statement createStatement ()
- PreparedStatement createStatement (String sql)
管理事务
开启事务:setAutoCommit(boolean autoCommit),设置参数为false,即为提交事务
提交事务:rollback
回滚事务:commit
2.3 statement
执行sql的对象
boolean execute(String sql)
int executeUpdate(String sql):执行DML(insert、update、delete)、DDL(create、drop、alter),返回值为影响的行数
ResultSet executeQuery(String sql):执行DQL(select)语句,返回一个结果集对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36public static void main(String[] args) {
.............
/*
* 练习executeUpdate、executeQuery
* stu表字段 id(Int) stu_name(String) stu_phone(String)
* 添加一条记录
* 修改一条记录
* 删除一条记录
* 查询表中记录
* */
String sql = "insert into stu values(3,'qzy','456')";
int count = statement.executeUpdate(sql);
if(count>0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
sql = "update stu set stu_phone = '123' where id = 2";
count = statement.executeUpdate(sql);
if(count>0){
System.out.println("修改成功");
}else{
System.out.println("修改失败");
}
sql = "delete from stu where id = 3";
count = statement.executeUpdate(sql);
if(count>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
..........
}
2.4 ResultSet
- 结果集对象,封装查询结果
2.5 PreparedStatement
- 执行sql的对象
- execute:能执行CRUD中的任意一种语句。它的返回值是一个boolean类型,表示是否有结果集。有结果集为true,没有结果集为false
- executeUpdate:只能执行CUD,查询语句无法执行,返回值影响数据库记录的行数
- executeQuery:只能执行select语句,无法执行增删改,执行结果封装的结果集ResultSet对象