一个提交动作要执行两个sql语句:insert into b表... ;update a表 set bid=b表的id主键;
事务控制的语句 public void executeBatchSql(String[] sqls) throws Exception {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.getCurrentSession();
Transaction tx = null;
Connection conn = null;
try {
tx = session.beginTransaction();
conn = session.connection();
//PreparedStatement psd = null;
for(int i=0; i<sqls.length; i++)
{
PreparedStatement psd = conn.prepareStatement(sqls[i]);
psd.execute();
psd.close();
}
tx.commit();
}
catch (Exception e) {
e.printStackTrace();
if (tx!=null) {
tx.rollback();
}
if (conn!=null) {
conn.close();
}
throw e;
}
}这边如果要获得主键,上面好像不行吧,请教大家有什么方法。以前遇到这个问题都是用存储过程搞定的,可是有时候参数太多,总不能用存储过程吧
事务控制的语句 public void executeBatchSql(String[] sqls) throws Exception {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.getCurrentSession();
Transaction tx = null;
Connection conn = null;
try {
tx = session.beginTransaction();
conn = session.connection();
//PreparedStatement psd = null;
for(int i=0; i<sqls.length; i++)
{
PreparedStatement psd = conn.prepareStatement(sqls[i]);
psd.execute();
psd.close();
}
tx.commit();
}
catch (Exception e) {
e.printStackTrace();
if (tx!=null) {
tx.rollback();
}
if (conn!=null) {
conn.close();
}
throw e;
}
}这边如果要获得主键,上面好像不行吧,请教大家有什么方法。以前遇到这个问题都是用存储过程搞定的,可是有时候参数太多,总不能用存储过程吧
sqls[0]=sql;sql = "insert into b(a_Id)" ;
sql += "values(?)";
sqls[1]=sql;
super.executeBatchSql(sqls);
这里b表要获得a表的id,怎获得
第二,即便是这么写,你的insert into那个sql语句,没有b表的主键值?
String sql="insert a ...";
sqls[0]=sql;sql = "update b set a_id=a.id" ;
sqls[1]=sql;
super.executeBatchSql(sqls);
印象里有个方法返回一个ResultSet 等我帮你查查哦
第一列就是该记录的ID