求教,子类继承父类,如何实现将子类和父类的属性写入数据库各自的表中,并做为一个事务进行处理(没有异常则全部保存,其中有异常则全部取消保存)比如:
父类(Person类的属性有: ID, 姓名, 性别, 年龄)
子类(Student类的属性有: ID, 学号, 班级)现要将Person和Student类的信息写入数据库中对应的表中(Person,Student),如何实现在一个数据库操作的事务中处理父类和子类数据的同时写入。哪位朋友能给点思路,能给个简单代码实现则更好了,谢谢!
父类(Person类的属性有: ID, 姓名, 性别, 年龄)
子类(Student类的属性有: ID, 学号, 班级)现要将Person和Student类的信息写入数据库中对应的表中(Person,Student),如何实现在一个数据库操作的事务中处理父类和子类数据的同时写入。哪位朋友能给点思路,能给个简单代码实现则更好了,谢谢!
解决方案 »
- 不显示删除回复显示所有回复显示星级回复显示得分回复 jxl 数据库中几十万条数据写入Excel 内存溢出
- java没有goto如何实现这样的程序?
- 在Eclipse中如何修改web.xml文件
- Java线程、集合大家用的多吗?用在哪?主要是用了哪些内容?有没有好的经验总结呢?
- [请教]几个java的基本问题(急!) 在线等待
- JAVA中一个线程怎么终止其子线程。当子线程正在阻塞读socket
- 简单问题,快来抢分吧
- 如何检测用户输入的字符串中有中文?定给分20
- 如何在java程序中获得拨号上网分配的动态IP?
- java高并发业务的性能问题
- 写一个判断语句,来大神指点下
- 求Java-springboot-客户端向服务端发送HTTPS请求的工具类
public class JdbcPool {
//通过dbcp jar报得到数据库连接池,交给其他类使用
//其他类调用数据库连接池getConnection
private static DataSource ds;
/**
* 读取配置文件
*
*/
private static Properties getProp(){
InputStream inputStream = JdbcPool.class.getClassLoader().getResourceAsStream("org/sue/jdbc/util/db.properities");
Properties prop =new Properties();
try {
prop.load(inputStream);
} catch (IOException e) {
throw new RuntimeException("找不到配置文件");
}
return prop;
}
static{
try {
Properties prop = getProp();
ds=BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
}
}
public DataSource getDs(){
return ds;
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.sue.jdbc.dbcp.pool.JdbcPool;public class Connection_Open_Close {
//实例化数据连接池
private static JdbcPool pool =new JdbcPool();
//本地线程变量
private static ThreadLocal<Connection> tLocal =new ThreadLocal<>();
//打开数据库连接
public static Connection getConnection(){
Connection conn= null;
try{
//得到conn 先从本地线程变量取
conn = tLocal.get();
//如果本地线程变量没有
if(conn == null){
//创建一个conn
conn = pool.getDs().getConnection();
//放进本地线程变量
tLocal.set(conn);
}
System.out.println(Thread.currentThread().getName()+"打开了conn"+ conn.hashCode());
} catch (Exception e) {
throw new RuntimeException("找不到文件");
}
return conn;
}
/**
* 开启事务
*/
public static void beginTransaction(){
Connection conn = null;
conn=tLocal.get();
//本地线程变量有conn
if(conn!=null){
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 提交事务
*/
public static void commitTransaction(){
Connection conn = null;
conn = tLocal.get();
//本地线程变量有conn
if(conn!=null){
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//关闭其他服务
public static void closeDB(ResultSet rs,PreparedStatement ppst){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ppst!=null){
try {
ppst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 回滚
*/
public static void rockback(){
Connection conn = null;
conn=tLocal.get();
//本地线程变量有conn
if(conn!=null){
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭数据库连接
*/
public static void closeConn(){
Connection conn =null;
conn =tLocal.get();
//本地线程变量有conn
if(conn!=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
打开事务;
执行父类保存的SQL;
执行子类保存的SQL;
关闭事务;
如出现异常则回滚事务;