JDBC的API解析

举报
执久呀 发表于 2022/07/25 07:18:58 2022/07/25
【摘要】 ​一、DriverManagerDriverManager(驱动管理类)作用:1、注册驱动2、获取数据库连接1、注册驱动:Class.forName("com.mysql.jdbc.Driver");注册驱动的书写方法,表面上没有使用  DriverManager类,选中Driver,ctrl+b看源码可知package com.mysql.jdbc;import java.sql.Driv...

一、DriverManager

DriverManager(驱动管理类)作用:

1、注册驱动

2、获取数据库连接

1、注册驱动:

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

注册驱动的书写方法,表面上没有使用  DriverManager类,选中Driver,ctrl+b看源码可知


package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

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!");
        }
    }
}

它使用了 DriverManager.registerDriver()的方法

在MySQL5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中的META-INF/services/java.sql.Driver文件的驱动类

编辑

 2、获取连接

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

参数

  1、url:连接路径

        语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2....

        举例:jdbc:mysql://127.0.0.1:3306/db1(本机127.0.0.1,本机域名:localhost)

   细节: 如果连接的是本机mysql服务器,并且mysql默认端口号是3306  ,则url可以简写为:jdbc:mysql://数据库名称?参数键值对如:jdbc:mysql:///db1

配置userSSL=false参数,禁用安全连接方式,解决警告提示

2、user:用户名

3、password:密码

解决警告提示:

?userSSL=false

String url="jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";

二、Connection

Connection(数据库连接对象)作用:

        1、获取执行SQL的对象

        2、管理事务

1、获取执sql对象

  • 普通执行SQL对象

Statement   createStatement()

  • 预编译SQL的执行SQL对象:防止SQL注入

PrepareStatement    prepareStatement(sql)

  • 执行存储过程对象

CallableStatement   prepareCall(sql)

2、事务管理

    mysql事务管理

开启事务:BEGIN;/START  TRANSACTION(start transaction)

提交事务:COMMIT;

回滚事务:ROLLBACK;

(MySQL默认自动提交事务)

JDBC事务管理: 

     Connection接口中定义了3个对应的方法

开启事务:setAutoCommit(boolean autoCommit);true为自动提交事务,false为手动提交事务(开启事务)

提交事务:commit()

回滚事务:rollback()

演示jdbc的事务

复制前面弄过的类到包下

package com.jdbc;

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCConnectionDemo {
    public static void main(String[] args) throws Exception {
        //1、注册驱动
        Class.forName("com.mysql.jdbc.Driver");
       //2、获取连接
         //url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"
        String url="jdbc:mysql://127.0.0.1:3306/kc_db01";
        //username是你的mysql用户名
        String username="root";
        //password是你的mysql密码
        String password="123456";
        Connection conn= (Connection) DriverManager.getConnection(url, username, password);
        //3、定义sql
        String sql1="update emp set salary=6666 where ename='zhangsan'";
        String sql2="update emp set salary=6666 where ename='lisi'";
        //4、获取执行sql的Statement对象
        Statement stat=conn.createStatement();
         
      //选中要处理的异常部分,ctrl+alt+t快捷键生成
        try {
            //开启事务
           conn.setAutoCommit(false);
           //执行sql
            int count1=stat.executeUpdate(sql1);
            //处理结果
            System.out.println("影响的行数:"+count1);

            //执行时sql
            int count2=stat.executeUpdate(sql2);
            //处理结果
            System.out.println("影响的行数:"+count2);

            //提交事务
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //回滚事务(回到开启事务之前,即什么也没处理前)
             conn.rollback();
        }finally {
            //7、释放资源(先开后释放)

            stat.close();
            conn.close();
        }

    }
}

运行之前数据库emp表:

编辑

 运行结果:编辑

 运行之后数据库emp表:

编辑

try之中的发生了异常 ,就会 被catch捕获,发生回滚,回滚到还没有开启事务之前,就是数据没有修改之前,若是没有用事务,就会导致可能一个成功一个失败,这是我们不愿意看到的。 启用了事务,用了回滚事务,可以保证多个事务要么同时成功,要么同时失败。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。