PreparedStatement另一种重载方法:
下面是JavaAPI在中对其的描述
Connection.prepareStatement(String sql, String[] columnNames)
String[] columnNames 表示的是自动生成值的列名
创建一个能够返回由给定数组指定的自动生成键的默认 PreparedStatement
对象。
可以从中取出新插入数据行中自动增长的列的值
下面通过简单实例演示如何使用
1.创建测试所需的数据库表以及序列
create table depts_cheri (
deptno number(8) primary key,
dname varchar(20),
loc varchar(100)
);
create sequence depts_seq_cheri;
create table emp_cheri (
empno number(8) primary key,
ename varchar(20),
job varchar(20),
mgr number(8),
hiredate date,
sal number(11,2),
comm number(11,2),
deptno number(8)
);
create sequence emps_seq;
2.编写测试程序
public class TestDay03 {
/**
* 添加部门,然后向此部门内添加一些员工
*/
@Test
public void test4(){
//假设要添加的部门数据如下
String dname = "财务部";
String loc = "北京";
//假设要添加的员工数据如下
String ename = "张三";
String job = "经理";
int mgr = 0;
double sal = 8000.0;
double comm = 2000.0;
String ename2 ="李四";
String job2 = "职员";
int mgr2 = 0;
double sal2 = 5000.0;
double comm2 = 500.0;
Connection conn = null;
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false);
//先添加部门
String sql ="insert into depts_cheri values("
+"depts_seq_cheri.nextval,?,?)";
System.out.println(sql);
//参数2是一个数组,存的是希望被ps记住的字段的名称
PreparedStatement ps = conn.prepareStatement(sql,new String[]{"deptno"});
ps.setString(1, dname);
ps.setString(2, loc);
ps.executeUpdate();
//从ps中获取它之前记录的字段的值,
//返回的结果集中只有一条数据。
//存的就是记录的那些字段的值
ResultSet rs = ps.getGeneratedKeys();
rs.next();
int deptno = rs.getInt(1);//对应ps记录的参数2中数组的元素顺序
//再添加员工
sql = "insert into emp_cheri values("
+"emps_seq.nextval,?,?,?,?,?,?,?)";
//员工1
ps = conn.prepareStatement(sql);
ps.setString(1, ename);
ps.setString(2, job);
ps.setInt(3, mgr);
ps.setDate(4, null);
ps.setDouble(5, sal);
ps.setDouble(6, comm);
ps.setInt(7, deptno);
ps.executeUpdate();
//员工2
ps = conn.prepareStatement(sql);
ps.setString(1, ename2);
ps.setString(2, job2);
ps.setInt(3,mgr2);
ps.setDate(4, null);
ps.setDouble(5, sal2);
ps.setDouble(6, comm2);
ps.setInt(7, deptno);
ps.executeUpdate();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
throw new RuntimeException("添加部门与员工失败!",e);
}finally{
DBUtil.close(conn);
}
}
}
使用Junit方式运行程序后,查看数据库中数据的变化,可以发现数据已成功保存!
适用场合:
当插入数据库中的某一字段column与某一自动增长的列相同时,使用该重载方法取出自动增长的列的字段值,然后将该自动增长列赋值给column字段。