我从其他类的对象得到的数据,在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;
}
大概代码如下:
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;
}
if(b==true ){
sql="select * from Iptfa_alarm_hnvoice_sms where Sms_id=
(select seq_Iptfa_alarm_hnvoice_sms.currval from dual)";//利用主键查询,获取序列的当前值就是你刚插入的值
ps=conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
SmsRecordImpl sri = new SmsRecordImpl();
sri.setSms_id(rs.getInt(1));
........
}
ResultSet rs = ps.getResultSet();
if(rs.next){
SmsRecordImpl sri = new SmsRecordImpl();
//用同样的方法设置sri对象中的属性
sri.setSms_id(rs.getInt(1));
//比如: sri.setSms_id(rs.getString(2));
return sri ;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
SQL> SELECT seq_Iptfa_alarm_hnvoice_sms.CURRVAL FROM SYS.dual;
SELECT seq_Iptfa_alarm_hnvoice_sms.CURRVAL FROM SYS.dual
*
第 1 行出现错误:
ORA-08002: 序列 SEQ_IPTFA_ALARM_HNVOICE_SMS.CURRVAL 尚未在此会话中定义序列的名字不错,请问各位这个SQL语句错在哪儿?该怎么写呢?
先单独执行(select seq_Iptfa_alarm_hnvoice_sms.nextval from dual) 返回一个主键
在执行insert into
在return seq
//只要传入一个把查出来ResultSet对象,还有一个要用到的Bean的字节码就可以
public static Object mapRow(ResultSet rs,Class clazz) throws InstantiationException, IllegalAccessException{
Object obj = clazz.newInstance();
try {
for(int c=1;c<=rs.getMetaData().getColumnCount();c++)
{
String propertyName = rs.getMetaData().getColumnName(c);
//同过PropertyDescritor类来获取对pt1对象的x字段的描述信息
PropertyDescriptor pd = new PropertyDescriptor(propertyName,clazz);
//通过描述信息就可以获取相应的set方法
Method methodSetX = pd.getWriteMethod();
//调用方法,传入要操作的对象,和要set进去的值。
methodSetX.invoke(obj,rs.getObject(propertyName));
}
} catch (IllegalArgumentException e) {
throw new ExceptionInInitializerError("找不到这个字段");
} catch (SQLException e) {
e.printStackTrace();
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// //获取当前结果集某中列的个数
// rs.getMetaData().getColumnCount();
// //获取当前结果集某一列的名称
// rs.getMetaData().getColumnName(1);
return obj;
}
}