当前位置: java基础教程 > 20-jdbc > 阅读正文

JDBC 技术

2021.1.8.   594 次   1669字

jdbc 全称为 java database connectivity,是 java 操作数据库的技术。

jdbc 的本质是一套操作关系型数据库的接口。各个数据库厂商提供实现的驱动 jar 包,由程序员编写操作数据库代码。

一. jdbc 实现增删改查

1.导入驱动jar ( jar 包下载,点击这里

2.注册驱动

class.forName("com.mysql.jdbc.Driver");

( 8.0 以上版本为 com.mysql.cj.jdbc.Driver )

(上面的写法,实际就是实例化 class 的作用)

(也可以 DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); )

3.获取数据库连接对象

connection conn =DriverManager.getConnection("jdbc:mysql://host:port/db","user","password");

4.定义sql

String sql = "select * from user";

5.获取执行sql语句的对象statement

Statement stmt = conn.createStatement();

6.执行sql,接收返回结果

int count = stmt.executeUpdate(sql);

7.处理结果

System.out.println(count);

8.释放连接对象

stmt.close(conn);
stmt.close(stmt);

二 对象详解

1.DriverManager:驱动管理器

用于注册驱动:class.forName(“com.mysql.jdbc.Driver”);

(mysql 5 以后的版本jar包会自动注册驱动)

连接数据库:DriverManager.getConnection(“url”,”user”,”password”);

( url 的写法 :jdbc:sql://host:port/db)

2.Connection:数据库连接对象

获取执行 sql 对象:

  • createStatement()
  • prepareStatement(String sql)

管理事务

  • 开启事务:void setAutoCommit(boolean autoCommit);
  • 提交事务:commit();
  • 回滚事务:rollback();
3.Statement:执行 sql 的对象

执行 sql

  • boolean execute(String sql); 可执行任意sql
  • int executeUpdate(String sql); 执行DML,DDL
  • ResultSet executeQuery(String sql); 执行DQL语句
4.ResultSet:结果集对象

是一个结果集,包含了多条数据,是 sql 查询到的所有数据

每次操作一条数据,通过移动游标不断获取数据

  • boolean rs.next(); 向后移动一条数据,(它同时返回一个 boolean)
  • XXX getXXX(“name”); 获取 XXX 类型的数据,名称为 name
5.Preparestatement对象,预编译sql对象

sql 的编写如果是静态的,需要连接字符串,容易被注入sql

用 ? 作为占位符,编译时,再换成真正的字符,这样更安全

在执行前,对 ? 通过 pstmt.setXXX( index, value);赋值

三 事务管理

这里的事务,包含多个语句,如何保证中途错误时,回滚?

在获取连接之后(getConnection),首先就要开启事务

            //开启事务
            conn.setAutoCommit(false);

在执行完 sql 语句,进行提交事务

            //提交事务
            conn.commit();

接着,捕获 exception ,然后在 exception 中再捕获,看是否存在事务异常,如果存在事务异常,那么事务回滚

catch (Exception e) {
            //事务回滚
            try {
                if(conn != null) {
                    conn.rollback();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群