3.3JDBC学习——获取自增长的值和JDBC处理事务

JAVAWEB文章索引点这里
下面介绍如何获取自增长的值:
首先定义一张表increase(id,name),其中id为自增长的值
代码

public class IncreaseTest {
    public static void main(String[] args) {
        String sql = "insert into increase(name) values(?)";
        Connection conn = DBUtils.getConnection();
        PreparedStatement psttm = null;
        /*
         * 设置为RETURN_GENERATED_KEYS:可以返回自增长值
         * 设置为NO_GENERATED_KEYS:不能返回自增长值
         * */
        try {
        psttm = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
        psttm.setString(1, "zhangsan");
        psttm.executeUpdate();
        /*
         * 获取自增长的值,rs中只包含了自增长的字段
         * */
        ResultSet rs = psttm.getGeneratedKeys();
        if(rs.next()) {
            System.out.println(rs.getInt(1));
        }}catch (Exception e) {
            e.printStackTrace();
        }
    }
}

JDBC处理事务
在数据库操作中,一项事务是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元。只有当事务中所有的操作都正常完成,整个事务才能被提交到数据库中,如果有一项操作没有完成,则整个事务会被撤销。
针对JDBC处理书屋的操作,在Connection接口中提供了三个相关的方法,具体如下:

  • setAutoCommit(boolean autoCommit):设置是否自动提交事务
  • commit():提交事务
  • rollback():撤销事务
    默认情况下,事务是会自动提交的。如果每一条操作数据库的SQL语句执行成功,系统会自动调用commit方法来提交事务。
    例子模拟银行转账:
public static void main(String[] args) {
        String sql1 = "update bank set money=money-200 where id = 1";
        String sql2 = "update bank set money=money+200 where id = 2";
        Connection conn = DBUtils.getConnection();
        try {
            //关闭事务的自动提交
            conn.setAutoCommit(false);
            //执行sql语句
            conn.prepareStatement(sql1).executeUpdate();
            conn.prepareStatement(sql2).executeUpdate();
            //提交事务
            conn.commit();
        } catch (SQLException e) {
            //如果出现异常,则回滚
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            DBUtils.close(conn);
        }
        System.out.println("执行完毕");
    }

猜你喜欢

转载自blog.csdn.net/smallhc/article/details/80764941