Java JDBC数据库 之 事务提交

http://www.verejava.com/?id=16998493339542

下载 Oracle 或者 Mysql Jar 驱动 

mysql-connector-java-3.0.10-stable-bin.jar 
ojdbc14.jar 

package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil
{
    private Connection conn;//数据库的链接对象
    
    public DBUtil()
    {
        //加载驱动
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
    }
    
    //打开数据的链接
    public Connection openConnection()
    {
        try
        {
            conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "myspace", "myspace123");
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return conn;
    }
    
    //执行 INSERT DELETE UPDATE 的方法
    public boolean executeUpdate(String sql)
    {
        //打开数据库
        openConnection();
        //创建执行 sql 的对象
        try
        {
            Statement stmt=conn.createStatement();
            //执行sql 语句
            if(stmt.executeUpdate(sql)>0)
            {
                return true;
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            DBClose();
        }
        
        return false;
    }
    
    //执行 sql 的 查找 SELECT 的方法
    public ResultSet executeQuery(String sql)
    {
        //打开数据库链接
        openConnection();
        //创建执行sql 的对象
        Statement stmt=null;
        ResultSet rs=null;
        try
        {
            stmt = conn.createStatement();
            rs=stmt.executeQuery(sql);
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        
        return rs;
        
    }
    
    //绑定的sql INSERT DELETE UPDATE 方法
    public boolean executeUpdate(String sql,Object[] params)
    {
        //打开数据库
        openConnection();
        //创建绑定对象
        try
        {
            PreparedStatement pstmt=conn.prepareStatement(sql);
            
            //填充 ? 的值
            for(int i=0;params!=null&&i<params.length;i++)
            {
                if(params[i] instanceof Integer)
                {
                    pstmt.setInt(i+1, Integer.parseInt(params[i].toString()));
                    continue;
                }
                if(params[i] instanceof Float)
                {
                    pstmt.setFloat(i+1, Float.parseFloat(params[i].toString()));
                    continue;
                }
                if(params[i] instanceof Double)
                {
                    pstmt.setDouble(i+1, Double.parseDouble(params[i].toString()));
                    continue;
                }
                if(params[i] instanceof String)
                {
                    pstmt.setString(i+1, params[i].toString());
                }
                
                //java.sql.Date,   java.util.Date
                if(params[i] instanceof java.util.Date)
                {
                    //将 java.util.Date 转成  java.sql.Date
                    java.util.Date javaDate=(java.util.Date)params[i];
                    java.sql.Date sqlDate=new java.sql.Date(javaDate.getTime());
                    pstmt.setDate(i+1, sqlDate);
                    continue;
                }

                if(params[i] instanceof java.util.Timestamp)
                {
                    //将 java.util.Date 转成  java.sql.Date
                    java.util.Date javaDate=(java.util.Date)params[i];
                    java.sql.Timestamp timestamp=new java.sql.Timestamp(javaDate.getTime());
                    pstmt.setTimestamp(i+1, timestamp);
                    continue;
                }
            }
            //执行 绑定的 sql 语句
            if(pstmt.executeUpdate()>0)
            {
                return true;
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            DBClose();
        }
        
        return false;
    }
    
    //绑定的sql 查找 SELECT 方法
        public ResultSet executeQuery(String sql,Object[] params)
        {
            //打开数据库
            openConnection();
            //创建绑定对象
            try
            {
                PreparedStatement pstmt=conn.prepareStatement(sql);
                
                //填充 ? 的值
                for(int i=0;params!=null&&i<params.length;i++)
                {
                    if(params[i] instanceof Integer)
                    {
                        pstmt.setInt(i+1, Integer.parseInt(params[i].toString()));
                        continue;
                    }
                    if(params[i] instanceof Float)
                    {
                        pstmt.setFloat(i+1, Float.parseFloat(params[i].toString()));
                        continue;
                    }
                    if(params[i] instanceof Double)
                    {
                        pstmt.setDouble(i+1, Double.parseDouble(params[i].toString()));
                        continue;
                    }
                    if(params[i] instanceof String)
                    {
                        pstmt.setString(i+1, params[i].toString());
                    }
                    
                    //java.sql.Date,   java.util.Date
                    if(params[i] instanceof java.util.Date)
                    {
                        //将 java.util.Date 转成  java.sql.Date
                        java.util.Date javaDate=(java.util.Date)params[i];
                        java.sql.Date sqlDate=new java.sql.Date(javaDate.getTime());
                        pstmt.setDate(i+1, sqlDate);
                        continue;
                    }

                    if(params[i] instanceof java.util.Timestamp)
                    {
                        //将 java.util.Date 转成  java.sql.Date
                        java.util.Date javaDate=(java.util.Date)params[i];
                        java.sql.Timestamp timestamp=new java.sql.Timestamp(javaDate.getTime());
                        pstmt.setTimestamp(i+1, timestamp);
                        continue;
                    }
                }
                //执行 绑定的 sql 语句
                return pstmt.executeQuery();
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
            
            
            return null;
        }
    
    //关闭数据库链接
    public void DBClose()
    {
        if(conn!=null)
        {
            try
            {
                conn.close();
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }
}





package com.transaction;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

import com.db.DBUtil;

public class TestAddMore
{
    public static void main(String[] args)
    {
        DBUtil db=new DBUtil();
        Connection conn=db.openConnection();
        
        try
        {
            //设置事物为不自动提交
            conn.setAutoCommit(false);
            //插入多条记录
            String sql="";
            for(int i=0;i<10;i++)
            {
                if(i==5) //插入错误的sql 语句
                {
                    sql="INSERT INTO dept(id,name)VALUES('a','bbbb')";
                    PreparedStatement pstmt=conn.prepareStatement(sql);
                    pstmt.executeUpdate();
                }
                else
                {
                    sql="INSERT INTO dept(id,name)VALUES(?,?)";
                    PreparedStatement pstmt=conn.prepareStatement(sql);
                    pstmt.setInt(1,i+1);
                    pstmt.setString(2, "部门"+i);
                    pstmt.executeUpdate();
                }
                
            }
            
            //事物提交
            conn.commit();
        } catch (SQLException e)
        {
            //回滚
            try
            {
                conn.rollback();
            } catch (SQLException e1)
            {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        finally
        {
            db.DBClose();
            
        }
        
        
    }
}

http://www.verejava.com/?id=16998493339542

猜你喜欢

转载自www.cnblogs.com/verejava/p/9236919.html
今日推荐