JDBC

本文最后更新于:1 个月前

JDBC

  • Java DataBase Connectivity

快速入门

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
package com.test.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo {
public static void main(String[] args) throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/world";
String username = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url,username,password);
//3.定义sql
String sql = "update city set Population = 178 where ID = 1";
//4.获取执行sql的对象
Statement stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);
System.out.println(count);
//6.释放资源
stmt.close();
conn.close();
}
}

API详解

DriverManager


  • 注册驱动
1
Class.forName("com.mysql.jdbc.Driver");
  • 实质上Driver类的静态代码块中已经执行了 DriverManager 对象的 registerDriver() 方法进行驱动的注册了,那么我们只需要加载 Driver 类,该静态代码块就会执行。

Mysql5之后版本可省略注册驱动步骤

  • 连接数据库
    • url语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
    • 本地服务器简写:jdbc:mysql:///3306/databasename?....
    • useSSL=false 参数,禁用安全连接方式,解决警告提示

Connection conn = DriverManager.getConnection(url, username, password);

Connection


  • 获取执行对象
1
2
3
4
//普通执行sql对象
Statement stmt = conn.createStatement();
//预编译sql对象
PreparedStatement ptmt = conn.prepareStatement(sql);
  • 事务管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Statement stmt = conn.createStatement();
try {
// ============开启事务==========
conn.setAutoCommit(false);
//5. 执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6. 处理结果
System.out.println(count1);
<!--int i = 3/0;-->
//5. 执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6. 处理结果
System.out.println(count2);

// ============提交事务==========
//程序运行到此处,说明没有出现任何问题,则需求提交事务
conn.commit();
} catch (Exception e) {
// ============回滚事务==========
//程序在出现异常时会执行到这个地方,此时就需要回滚事务
conn.rollback();
e.printStackTrace();
}

Statement


  • 执行DDL、DML语句

int count = stmt.executeUpdate(sql);

  • 执行DQL语句

ResultSet rs = stmt.executeQuery(sql);

ResultSet


1
2
3
4
5
6
7
8
9
10
11
12
13
14
ResultSet rs = stmt.executeQuery(sql);
//光标向下移动一行,并且判断当前行是否有数据
while (rs.next()){
//获取数据 getXxx()
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");

System.out.println(id);
System.out.println(name);
System.out.println(money);

System.out.println("--------------");
}

PreparedStatement


  • 预编译,防Sqli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 定义sql
String sql = "select * from tb_user where username = ? and password = ?";
// 获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置?的值
pstmt.setString(1,name);
pstmt.setString(2,pwd);
// 执行sql
ResultSet rs = pstmt.executeQuery();
// 判断登录是否成功
if(rs.next()){
System.out.println("登录成功~");
}else{
System.out.println("登录失败~");
}

数据库连接池

  • 负责分配、管理数据库连接。

Druid


  • 使用

导入jar包 druid-1.1.12.jar

定义配置文件

加载配置文件

获取数据库连接池对象

获取连接

  • 配置文件
1
2
3
4
5
6
7
8
9
10
11
//workspace/src/druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
  • 使用代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* Druid数据库连接池演示
*/
public class DruidDemo {

public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件
//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();
System.out.println(connection); //获取到了连接后就可以继续做其他操作了

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!