jdbc 事务问题 JDBC 事务开始(sqlserver2008) 1.插入主表一条语句 2.查询主表新插入一条语句的主键(Connection 未提交如何查询到?) 3.插入从表一条语句(connection 未提交如何获得外键值?) 事务结束如何解决?先谢谢~! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果使用jdbc,就自动有事务提交了。 JDBC 事务开始(sqlserver2008)Connection.setAutoCommit(false)1.插入主表一条语句2.查询主表新插入一条语句的主键(Connection 未提交如何查询到?)3.插入从表一条语句(connection 未提交如何获得外键值?) 事务结束 你主表的主键是如何生成的?如果是用@@IDENTITY那么执行SELECT @@IDENTITY应该能够获取的到,如果你是自己的方式生成的话,那么你可以先获取到ID,然后再写入insert语句中。 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager .getConnection("jdbc:mysql://localhost/BBS?user=root&password=root"); //连接数据库conn.setAutoCommit(false); //不自动提交 String sql = "insert into article values (null,0,?,?,?,now(),0)";PreparedStatement pstat = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句//(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志Statement stat = conn.createStatement();pstat.setInt(1, -1);pstat.setString(2,title);pstat.setString(3,content);pstat.executeUpdate();ResultSet rsKey = pstat.getGeneratedKeys(); //ResultSet 指示键值rsKey.next();int key = rsKey.getInt(1); //得到第一个键值stat.executeUpdate("update article set rootid = " + key + " where id = " + key);conn.commit();conn.setAutoCommit(true); //设回自动提交 如果表的主键是自增IDENTITY,可以使用MSSQL的内置函数SCOPE_IDENTITY(),我以前就采用了这种方法,比较简洁,但移植性差。 不用提交事务就可以拿到主表或从表的主键了,执行了SAVE方法,就有方法拿到了,事务没提交,可以代表实体的值没保存到硬盘中,但这时实体的值已经在内存中生成了。 Java 中使用JSON序列化问题? NetBeans开发JSP的文件存放目录问题! 求助:Struts验证错误显示 求教用jacob进行excel转换 jsp问题 Sping中的单态Bean是线程安全的吗?为什么? 新手求救——关于DOM 怎么处理呀?帮帮忙,在线等 关于一个XML的问题. spring ehcache手动或定时刷新缓存,如何实现? oracle导出数据报错。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 用hibernate和structs框架做时出现的错误,怎么解决呀
Connection.setAutoCommit(false)
1.插入主表一条语句
2.查询主表新插入一条语句的主键(Connection 未提交如何查询到?)
3.插入从表一条语句(connection 未提交如何获得外键值?)
事务结束
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager
.getConnection("jdbc:mysql://localhost/BBS?user=root&password=root"); //连接数据库
conn.setAutoCommit(false); //不自动提交
String sql = "insert into article values (null,0,?,?,?,now(),0)";
PreparedStatement pstat = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句
//(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志
Statement stat = conn.createStatement();pstat.setInt(1, -1);
pstat.setString(2,title);
pstat.setString(3,content);
pstat.executeUpdate();ResultSet rsKey = pstat.getGeneratedKeys(); //ResultSet 指示键值
rsKey.next();
int key = rsKey.getInt(1); //得到第一个键值
stat.executeUpdate("update article set rootid = " + key + " where id = " + key);conn.commit();
conn.setAutoCommit(true); //设回自动提交
如果表的主键是自增IDENTITY,可以使用MSSQL的内置函数SCOPE_IDENTITY(),我以前就采用了这种方法,比较简洁,但移植性差。