Joe1sn's Cabinet

JavaWeb笔记-JDBC

  • 基本概念
  • 快速入门
  • 对JDBC中各个接口和类详解

JDBC概念

**概念:**Java DataBase Connectivity ,Java数据库连接

本质(类似Django的ORM):The sun公司定义的一套操作所有关系型数据库的规则(接口)。各个厂家根据接口去实现。我们可以是有这套接口编程,真正的驱动时jar包中的实现类

快速入门

简单步骤

  1. 导入驱动jar包
  2. 注册驱动
  3. 数据库连接对象Connection
  4. 定义sql
  5. 获取执行SQL语句的Statement对象
  6. 执行sql,接受返回结果
  7. 处理结果
  8. 释放资源

简单使用

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

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

/*
JDBC快速入门
*/
public class JdbcDemo1 {
public static void main(String[] args) throws Exception {
//1.导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb","root","J8L 7T");
//4.定义sql语句
String sql = "update user set UID=00000 where XH=302";
//5.获取执行sql对象
Statement statement = conn.createStatement();
//6.执行sql方法
int count = statement.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
statement.close();
conn.close();
}
}

步骤详解

  • DriverManager:驱动管理对象

    1. 注册驱动

      注册与给定的驱动程序 DriverManager

      1
      static void registerDriver(Driver driver)  

      写代码使用

      1
      Class.forName("com.mysql.jdbc.Driver");

      为静态代码使用

      1
      2
      3
      4
      5
      package com.mysql.cj.jdbc;

      public class Driver extends com.mysql.cj.jdbc.NonRegisteringDriver implements java.sql.Driver {
      public Driver() throws java.sql.SQLException { /* compiled code */ }
      }

      mysql5.0以上可以不用注册驱动

    2. 获取数据库连接

      尝试建立与给定数据库URL的连接。

      1
      static Connection getConnection(String url, String user, String password) 

      url:jdbc:mysql://ip:port/database

      默认为本地sql地址及默认端口

  • Connection:数据库连接对象

    1. 获取执行sql对象
    1
    Statement createStatement()
    1
    PreparedStatement prepareStatement(String sql)
    1. 管理事务

      开启事务:参数为false即开启事务

      1
      void setAutoCommit(boolean autoCommit)

      提交事务

      1
      void commit()

      回滚事务

      1
      void rollback()
  • Statement:执行sql对象

    执行任意sql

    1
    boolean execute(String sql)

    执行DML DDL语句,返回影响的行数

    1
    int executeUpdate(String sql)
    1
    ResultSet executeQuery(String sql)
  • ResultSet:结果集对象

  • PreparedStatement:执行sql对象

JDBC工具类:JDBCUtils

目的:简化书写

分析:

  1. 注册驱动也抽取
  2. 抽取一个方法获取连接对象
  3. 抽取方法释放资源

抽取连接对象

1

close释放资源重载

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
36
37
38
39
40
41
42
public static void close(Statement stmt, Connection conn){
if(stmt != conn){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//释放方法2
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (rs != conn){
try{
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != conn){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}