我在做两个需要关联的表的时候,第二张表需要知道第一张表的id信息(做关联),然而第一张表刚插入到数据库,如何利用dbutils获得id呢?
我用的方法是利用@@identity这个方法
insert into 后获得自动插入的id(select @@identity)
当运行完插入语句后,执行select @@identity就可得到自动生成的id
具体代码
@Override
public long setfptable(dctable dc) {
String sql="insert into tbknhd3 (cunCode,bdcRen,phonebdcren,dtime,dcRen,phone,j0101,j0102,j0103,j0104,j0105,j0106,j0107,j0201,j0202,j0203,j0204,j0205,j0206,j0207,j0208,j0209,j0301,j0302,j0303,j0304,j0401,j0402,j0501,j0502,j0601,j0602,j0701,j0702,j0801,j0802,j0901,j0902,j0903,j0904,j1001,j1002,j1101,j1102,j1103,j1104,j1105,j1106,j1107,j1108,j1109,j1110,j1111,j1112,j1201,j1202,j1203,j1204,j1301,j1302,j1303,j1304,j1305,j1306,j1307,j1308,j1401,j1402,j1501,r0101,r0102,r0103,r0201,r0202,r0203,r0301,r0302,r0303,r0304,r0305,r0401,r0402,r0501,r0502,r0503,r0504,r0505,r0601,r0602,r0603,r0604,r0605,r0606,r0607,r0608,r0609,r0610,r0701) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
String sql2="select @@identity";
int i=-1;
BigInteger num = null;
try {
i = qr.update(sql,dc.getCunCode(),dc.getBdcRen(),dc.getPhonebdcren(),dc.getDtime(),dc.getDcRen(),dc.getPhone(),dc.getJ0101(),dc.getJ0102(),dc.getJ0103(),dc.getJ0104(),dc.getJ0105(),dc.getJ0106(),dc.getJ0107(),dc.getJ0201(),dc.getJ0202(),dc.getJ0203(),dc.getJ0204(),dc.getJ0205(),dc.getJ0206(),dc.getJ0207(),dc.getJ0208(),dc.getJ0209(),dc.getJ0301(),dc.getJ0302(),dc.getJ0303(),dc.getJ0304(),dc.getJ0401(),dc.getJ0402(),dc.getJ0501(),dc.getJ0502(),dc.getJ0601(),dc.getJ0602(),dc.getJ0701(),dc.getJ0702(),dc.getJ0801(),dc.getJ0802(),dc.getJ0901(),dc.getJ0902(),dc.getJ0903(),dc.getJ0904(),dc.getJ1001(),dc.getJ1002(),dc.getJ1101(),dc.getJ1102(),dc.getJ1103(),dc.getJ1104(),dc.getJ1105(),dc.getJ1106(),dc.getJ1107(),dc.getJ1108(),dc.getJ1109(),dc.getJ1110(),dc.getJ1111(),dc.getJ1112(),dc.getJ1201(),dc.getJ1202(),dc.getJ1203(),dc.getJ1204(),dc.getJ1301(),dc.getJ1302(),dc.getJ1303(),dc.getJ1304(),dc.getJ1305(),dc.getJ1306(),dc.getJ1307(),dc.getJ1308(),dc.getJ1401(),dc.getJ1402(),dc.getJ1501(),dc.getR0101(),dc.getR0102(),dc.getR0103(),dc.getR0201(),dc.getR0202(),dc.getR0203(),dc.getR0301(),dc.getR0302(),dc.getR0303(),dc.getR0304(),dc.getR0305(),dc.getR0401(),dc.getR0402(),dc.getR0501(),dc.getR0502(),dc.getR0503(),dc.getR0504(),dc.getR0505(),dc.getR0601(),dc.getR0602(),dc.getR0603(),dc.getR0604(),dc.getR0605(),dc.getR0606(),dc.getR0607(),dc.getR0608(),dc.getR0609(),dc.getR0610(),dc.getR0701());
num= (BigInteger) qr.query(sql2,new ScalarHandler(1));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return num.longValue();
}
由于数据比较多,直接看sql2即可。在处理过程中,原来使用long来接收查询id语句的返回值(select @@identity)用强制转换程long接收,结果报错,发现它的返回值是BigInteger于是先用biginteger接收再用 longValue()转换成long类型返回。 若有错误希望指点。