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("执行完毕");
}