当前位置:Gxlcms > 数据库问题 > JDBC事务

JDBC事务

时间:2021-07-01 10:21:17 帮助过:3人阅读

com.oracle.demo01; //事务 import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import com.oracle.tools.JDBCUtils; public class Demo01 { public static void main(String[] args) { // 获取连接 Connection conn=JDBCUtils.getConn(); Statement sta=null; String sql="insert into account(aname,money) values(‘wangwu‘,1000)"; try { sta=conn.createStatement();//用statement 直接可以传值,不用占位 // 执行SQL前 手动开启事务 conn.setAutoCommit(false);//手动开启设置 sta.executeUpdate(sql); } catch (SQLException e) { // 回滚 try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // TODO Auto-generated catch block e.printStackTrace(); }finally{ // 提交 try { conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

一、DBUtils事务操作

1.QueryRunner

有参构造:QueryRunner runner = new QueryRunner(DataSource dataSource);

有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连      接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数  的update方法即可操作数据库

无参构造:QueryRunner runner = new QueryRunner();

无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使   用QueryRunner对象操作数据库时要使用有Connection参数的方法

代码 展示

新建个tool

package com.oracle.tools;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class MyDBUtils {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/java0603?useUnicode=true&characterEncoding=UTF-8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";
    /*
     * 创建连接池BasicDataSource
     */
    public static BasicDataSource dataSource = new BasicDataSource();
    //静态代码块
    static {
        //对连接池对象 进行基本的配置
        dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
        dataSource.setUrl(URL); //指定要连接的数据库地址
        dataSource.setUsername(USERNAME); //指定要连接数据的用户名
        dataSource.setPassword(PASSWORD); //指定要连接数据的密码
    }
    /*
     * 返回连接池对象
     */
    public static DataSource getDataSource(){
        return dataSource;        
    }
    
//    返回一个连接对象
    public static Connection getConn(){
        Connection conn=null;
        try {
            conn=dataSource.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
}
--------------------------------------------------
package com.oracle.demo01;
//无参构造QueryRunner 事务
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import com.oracle.tools.MyDBUtils;

public class Demo02 {
    public static void main(String[] args) {
//        创建queryrunner对象
        QueryRunner qr=new QueryRunner();
//        获取连接对象
        Connection conn=MyDBUtils.getConn();
        String sql="update account set money=money-? where aname=?";
        try {
//            开启事务
            conn.setAutoCommit(false);//手动开启
            qr.update(conn,sql,100,"zhangsan");//更改-100
        } catch (SQLException e) {
//            回滚事务 
            try {
                conn.rollback();//把回滚写到try里面,上面代码已有错误就会自动回到开启事务
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{ //不管对错,上面代码只要是对的,在这里就会执行
//            提交事务
            try {
                conn.commit();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }        
    }    
}

做个转账项目

建个dynamic 

导包技术图片 技术图片

 

JDBC事务

标签:on()   图片   info   必须   str   user   span   comm   注意   

人气教程排行