JDBC事务控制 菜鸟入门

来源:互联网 发布:怎样和淘宝买家聊天 编辑:程序博客网 时间:2024/05/16 05:47

上一篇文章我们分享了一个简单的JDBC的小案例,这一章我们来看看JDBC的事务:

第一什么是事务
就是一个操作序列,要么全部执行 要么都不执行,保持我们数据的一致性,一个sql语句就是一个控制单元
一组sql语句的执行就是一次事务当然我们也会把一个sql语句的提交叫做事务。

我们来看看事务有哪些特性:

原子性:
事务中的sql要么全部提交 要么全部回滚到最初的状态

一致性
数据库的完整性约束

隔离性 事务应该是隔离性质 不应该影响其他事务的正常提交

永久性事务对数据库的影响应该是永久性的

我们也来看看一个普通的jdbc的链接查询

public class JdbcDao {        public static List<FileInfoBean>  TestDao() throws ClassNotFoundException, SQLException{        //我们建立三个变量        Connection con = null; //用于连接数据库        PreparedStatement str = null;//用于向数据库发送sql语句        ResultSet  resu = null;//用于处理我们查找到的结果集        Class.forName("com.mysql.jdbc.Driver");        //获取连接对象 传入要连接的数据库地址 并传入用户名称和密码        con = (Connection)JdbcUtil.GetConnection();        //创建sql语句        String sql = "select * from SCGA_QM_HTMLINFO";        //获取发送sql语句PreparedStatement对象    最大的区别就是 这里我们获取sql执行对象的时候是要把Sql语句传入过去的        str = (PreparedStatement) con.prepareStatement(sql);        //执行sql        resu = str.executeQuery();            List<FileInfoBean>  ArrayFileBean = new  ArrayList<FileInfoBean>();            while (resu.next()){                FileInfoBean file = new FileInfoBean();                file.setId(resu.getString("PK_ID"));                file.setFileName(resu.getString("F_FILENAME"));                file.setCreationTime(resu.getDate("F_CREATIONTIME"));                  ArrayFileBean.add(file);            }            return ArrayFileBean;        }        //创建main方法 调用TestDao() 抛出异常信息public static void main(String[] args) throws ClassNotFoundException, SQLException {            TestDao();}

以上是一个简单的jdbc查询实现 下面我们来看看加 一个加入的事务的jdbc如何写

public class JdbcDao {        public static List<FileInfoBean>  TestDao() {        //我们建立三个变量        Connection con = null; //用于连接数据库        PreparedStatement str = null;//用于向数据库发送sql语句        ResultSet  resu = null;//用于处理我们查找到的结果集        PreparedStatement str2 = null;        try {            Class.forName("com.mysql.jdbc.Driver");        } catch (ClassNotFoundException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        List<FileInfoBean>  ArrayFileBean = new  ArrayList<FileInfoBean>();        try {            //获取连接对象 传入要连接的数据库地址 并传入用户名称和密码            con = (Connection)JdbcUtil.GetConnection();            //设置自动提交为false            con.setAutoCommit(false);            //创建sql语句            String addSql = "insert into scga_qm_htmlinfo(PK_ID,F_FILENAME) values(?,?)";            String sql = "select * from scga_qm_htmlinfo";            //获取发送sql语句PreparedStatement对象    最大的区别就是 这里我们获取sql执行对象的时候是要把Sql语句传入过去的            str = (PreparedStatement) con.prepareStatement(sql);            str2 = (PreparedStatement) con.prepareStatement(addSql);            str2.setString(1, "11");            str2.setString(2, "胡君问");            //执行sql            resu = str.executeQuery();            //执行sql            int i = str2.executeUpdate();            //提交事务 我们在这里将两个sql作为一次事务进行提交            con.commit();            while (resu.next()){                FileInfoBean file = new FileInfoBean();                file.setId(resu.getString("PK_ID"));                file.setFileName(resu.getString("F_FILENAME"));                file.setCreationTime(resu.getDate("F_CREATIONTIME"));                  ArrayFileBean.add(file);                System.out.println(file.getFileName());            }        }        //如果发生异常我们就调用 connection对象的rollback方法进行回滚        catch (SQLException e){            System.out.println("发生错误进行回滚");            try {                con.rollback();            } catch (SQLException e1) {                // TODO Auto-generated catch block                e1.printStackTrace();            }        }             return ArrayFileBean;        }

其实主要就是
//设置自动提交为false
con.setAutoCommit(false);
//提交事务 我们在这里将两个sql作为一次事务进行提交
con.commit();
//如果发生异常我们就调用 connection对象的rollback方法进行回滚
con.rollback();
这三句代码来做jdbc事务的

1 0
原创粉丝点击