java相关 求方法 实现数据库数据同步

2个表表1和表2表结构字段一模一样现要求如果表1发生了修改删除添加数据表2同样修改删除添加问怎么实现?请说一个思路或发相关代码不使用触发器现在使用hibernate表一l... 2个表 表1 和表2 表结构 字段一模一样
现要求如果表1 发生了修改 删除 添加数据
表2 同样修改删除 添加
问 怎么实现?
请说一个思路 或发相关代码
不使用触发器
现在使用hibernate 表一 list1
表二 list2
怎么写一个循环 让 list1 和 list2中的对象一样
展开
 我来答
鼎硕元音乐甄选
推荐于2016-10-10 · TA获得超过3461个赞
知道小有建树答主
回答量:310
采纳率:33%
帮助的人:135万
展开全部
楼主用hibernate 所以说就不需要在手动管理connection的AutoCommit属性了。不用触发器的话,也好办,不过可能麻烦一点。

假设你已经做好了表list1和list2 到对象list1和list2的映射。list1和list2配置成一对一映射,list2的主键也是list1的外键,生成机制由list1负责。级联关系cascade属性设置为all,也就是对list1操作的时候hibernate会级联的操作它的附着物list2

那么在操作对象list1基础DAO中的曾删改查方法中,同时操作list2对象即可。

以增加操作为例:
比如 new出来一个list1对象,然后充填属性:
list1.setName("张三");
list1.setPwd("123456");
list1.getList2.setName(list1.getName());
list1.getList2.setpwd(list1.getPwd());

session.save(list1); //这里当持久化list1的时候,会级联把list2也持久了

提交transaction

关键问题还是配置,比较麻烦 容易出错。我对hibernate不是多了解,想的这个办法可能比较笨,应该还有好的办法来解决。等等高手来看看吧。
tomiscat2009
2009-04-19 · TA获得超过2434个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:538万
展开全部
事物Transaction。事物是这样的,当你拿到connection之后,就可以将提交属性设为手动提交,就是说,你发出的sql不会马上生效,而是在你手动commit事物时才真正更新数据库,在没有commit之前,你可以随时rollback,回滚你发出的所有sql,比方说异常出现时!!

例如:

connection.setAutoCommit(false);
发sql更新表1;
发sql更新表2;
connection.commit();
//最后别忘了将提交属性复原
connection.setAutoCommit(true);

如果这个过程catch Exception,那就
connection.rollback();//回滚你提交的sql,数据库就没任何更新了
connection.setAutoCommit(true);

当然,你也可以写触发器!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祚胤17
2009-05-05 · TA获得超过786个赞
知道大有可为答主
回答量:1149
采纳率:82%
帮助的人:263万
展开全部
显示表格
//import java.awt.*;
//import javax.swing.*;
//import java.sql.*;
//import javax.swing.table.*;
String[] colHeads=%%4;
Connection con=null;
Statement stmt=null;
ResultSet %%6=null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:"+%%1;
con=DriverManager.getConnection(url,%%2,%%3);
stmt=con.createStatement();
%%6=stmt.executeQuery("SELECT count(*) as au_count from "+%%5);
%%6.next();
int iCount=rs.getInt("au_count");
Object[][] data=new Object[iCount][];
int i=0;
%%6=stmt.executeQuery("SELECT * from "+%%5);
while(%%6.next()){
data[i]=new Object[iCount];
data[i][0]=%%6.getString("au_fname");
data[i][1]=%%6.getString("Phone");
data[i][2]=%%6.getString("City");
i++;
}
JTable table=new JTable(data,colHeads);
JScrollPane jsp=new JScrollPane(table);
getContentPane().add(jsp);
}catch(Exception e){
e.printStackTrace();
}
finally{
if(con!=null){
try {
%%6.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lackyhuang
2009-04-19 · TA获得超过633个赞
知道小有建树答主
回答量:813
采纳率:0%
帮助的人:867万
展开全部
最简单的是在表1上写触发器
这个问题已经在百度上问过很多次了,你去搜下吧,周末的也懒写代码了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式