Java web 系列:事务回滚

JDBC基础知识

1.什么是JDBC

  -1.JDBC(Java Database Connection)为Java开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成。是Java程序与数据库通信的标准API。

JDBC API使得开发人员可以使用纯Java的方式来连接数 据库,并执行操作。

  -2.sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库,因此,sun公司自己提供了一套API,只要数据库想要和Java连接的,

数据库厂商必须自己实现JDBC这套接口。而数据库厂商的JDBC实现,我们就叫它此数据库的驱动。

2.JDBC访问数据库流程

  1.加载JDBC驱动程序

  2.建立与数据库的连接

  3.发送SQL语句

  4.得到SQL执行结果

3.Java程序和数据库连接的时候,其实就是Socket连接。

4.JDBC常用接口

  Driver接口

    - Driver接口由数据库厂家提供,对于Java开发者而言,只需要使用Driver接口就可以了。

    - 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。

    - 驱动:就是各个厂商实现Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件。

    - 装载mysql驱动:Class.forName("com.mysql.jdbc.Driver");

    - 装载oracle驱动:Class.forName("com.jdbc.driver.OracleDriver");

  DriverManager接口

    - DriverManager接口是JDBC的管理层,作用于用户和驱动程序之间。

    - DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。

  Connection接口

    - Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

    - DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

      -Mysql

        Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

      -Oracle

        Connection con = DriverManager.getConnection("jdbc:oracle:thin@host:port/database", "user", "password");

   Statement接口

    - 用于执行静态SQL语句并返回它所生成结果的对象。

    - 三种Statement类:

      - Statement:

        由createStatement创建,用于发送简单的SQL语句(不带参数)

      - PreparedStatement:

        - 继承自Statement接口,有preparedStatement创建,用于发送含有一个或者多个输入参数的SQL语句。PreparedStatement对象

         比Statement对象效率更高,并且是防止SQL注入。我们一般都使用PreparedStatement。

      - CallableStatement:

        - 继承自preparedStatement。由方法prePareCall创建,用于调用存储过程。

    - 常用的Statement方法

        - execute():运行语句,返回是否有结果集。

        - executeQuery():运行select语句,返回ResultSet结果节

        - executeUpdate():运行insert/update/delete操作,返回更新的行数。

 

 

事务回滚

package com.lkb.jdbc;

import java.sql.*;

public class JDBCTest {
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db", "root", "aiziji0625..");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void insertUserData(Connection conn) throws SQLException {
        String sql = "insert into user(id,username,password)" +
                "values(2,'aa','bb')";
        Statement st = conn.createStatement();
        int count = st.executeUpdate(sql);
        System.out.println("用户插入" + count + "记录");
    }

    public static void insertAddressData(Connection conn) throws SQLException {
        String sql = "insert into address(id , address)" + "values(1,'shanghai')";
        Statement st = conn.createStatement();
        int count = st.executeUpdate(sql);
        System.out.println("地址插入" + count + "记录");
    }

    public static void main(String[] args) {
        Connection conn = null;
        try {
            conn = getConnection();
            conn.setAutoCommit(false);
            insertAddressData(conn);
            insertUserData(conn);
            conn.commit();
        } catch (Exception e) {
            System.out.println("=========捕获异常=========");
            e.printStackTrace();
            try {
                conn.rollback();
                System.out.println("=========事物回滚=========");
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        } finally {
            try {
//                rs.close();
//                st.close();
                conn.close();

            } catch (SQLException e) {

            }
        }
    }
}

参考文章:https://www.cnblogs.com/yangfanasp/p/6853950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值