在用jdbc写dao时,插入数据库一条记录,然后返回这条记录的Java对象,怎么写最好?请各位高手指教,在线等。。。
本帖最后由 fengfenglucky 于 2012-11-14 10:27:32 编辑
我从其他类的对象得到的数据,在dao中使用jdbc插入另外一张表,插入以后,需要返回这个刚插入的表所对应的对象,需要怎么写比较好呢?在线等,各位老师指点迷津。。。。
大概代码如下:
private SmsRecordImpl __adSmsRecord(VoicebeanImpl voicebean) {
Connection conn = ConnectionDB.getInstance().getConn();
String sql = "insert into Iptfa_alarm_hnvoice_sms(Sms_id,Alarm_orgfp,Alarm_sid) values(seq_Iptfa_alarm_hnvoice_sms.nextval,?,?)";
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,voicebean .getAlarm_orgfp());
ps.setString(2,voicebean .getAlarm_sid());
boolean b = ps.execute();
//接下来不知道怎么写返回SmsRecordImpl的对象比较好了,请各位老师指点,谢谢了!!!
// if(b==true ){
// ResultSet rs = ps.getResultSet();
// SmsRecordImpl sri = new SmsRecordImpl();
// sri.setSms_id(rs.getInt(1));
// }
} catch (
SQLException e) {
e.printStackTrace(); }
return null;
}
------解决方案--------------------可以以在finally里面执行查询,你怎么插入的,你就怎么查询(voicebean .getAlarm_orgfp()和voicebean .getAlarm_sid()两个值就作为查询的条件),新建一个你要的对象,然后把根据查询结果把值一个个set进去,查询完了就关闭连接
------解决方案--------------------
你用JDBC没办法的,你必须先将数据持久化到数据库,然后才能查询出来的,如果用Hibernate框架可以直接使用。
多一次查询没关系的,框架也是要查询的,JDBC效率还是比较高的。你可以使用保存时相关字段的值去查询数据库获得这条新增记录在数据库的全部信息。
------解决方案--------------------
这个不好说,插入的数据是可以直接返回去使用,但是如果数据库的某个字段是有数据库维护的(如ID自增,触发器操作等等),这样的话,直接返回信息就不全了,就那ID自增来说,直接返回就无法获取到该记录的ID了,如果后面用户想通过ID删除或更新的话就麻烦了不是。
------解决方案--------------------rs = stmt.getGeneratedKeys();
这个好像无法获取到Oracle的序列吧。
------解决方案--------------------
那就封装一个存储过程去做这种事,类型可以变成in out既进又出
JDBC通用解决不可能,不过oracle有returning语法做这种事:
CallableStatement cst = con.prepareCall("begin insert into table(col1,col2) values(?,?) returning col1,col2 into ?,?; end;");