如何将多个字段同时插入多个表中?

davidforever 2006-04-11 08:36:20
假设我有两个表A,B.A表有三个字段A1,A2,A3,A1为主键,B表有三个字段B1,B2,B3,B1为主键,B3为外键,A,B两表通过A1,B3连接.如何同时将值插入这几个字段中?该INSERT语句该怎样写???
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaoyonggang 2006-04-12
  • 打赏
  • 举报
回复
建议用 存储过程 或存储函数 可以保证 同步!
langya333 2006-04-12
  • 打赏
  • 举报
回复
学习
lcllcl987 2006-04-12
  • 打赏
  • 举报
回复
建议用存储过程。存储过程其实蛮好写。如果实在不会,就用jdbc的事务处理,贴一个批量运行sql的代码:

/**
* Excute sql
*/
public boolean doStatement(String[] sqlStrs)
{
boolean flag = false;
if (sqlStrs.length < 1)
return false;
try
{
InitialContext initial = new InitialContext();
ds = (DataSource) initial.lookup(dbjndi);
con = ds.getConnection();
con.setAutoCommit(false);
stmt = con.createStatement();

//System.out.println("sqlStrs.length:" + sqlStrs.length);

int count = sqlStrs.length / 7000 + 1;
System.out.println("count:" + count);
int end = 0;
for (int ii = 0; ii < count; ii++)
{
stmt.clearBatch();
end = (ii + 1) * 7000;
if (end > sqlStrs.length)
end = sqlStrs.length;
for (int i = ii * 7000; i < end; i++)
{
//modify by lcl
if (sqlStrs[i] != null && sqlStrs[i].trim().length() > 0)
stmt.addBatch(sqlStrs[i]);
System.out.println("in DbOperate.doStatement sql : " + sqlStrs[i]);
}
stmt.executeBatch();
//System.out.println("excute back:" + ii + "Strins begin:" + ii * 7000 + " end :" + end);
}

con.commit();
System.out.println("excute sql finished!");
flag = true;
}
catch (NamingException ee)
{
//System.out.println("DbOperate.java : find data source error, " + ee.toString());
stmtStr = "find data source error";
flag = false;
}
catch (Exception ex)
{
stmtStr = StringTool.removeNewline(ex.toString());
ex.printStackTrace();
if (ex.toString().indexOf("ORA") > 0)
stmtStr = StringTool.removeNewline(ex.toString().substring(ex.toString().indexOf("ORA") + 10));
//System.out.println("err String :" + stmtStr);
flag = false;

try
{
con.rollback();
}
catch (Exception ee)
{
ee.printStackTrace();
stmtStr = StringTool.removeNewline(ee.toString());
}
flag = false;
}
finally
{

try
{
con.setAutoCommit(true);
}
catch (SQLException e)
{
// TODO ???? catch ?
e.printStackTrace();
}
if (stmt != null)
{
try
{
stmt.close();
}
catch (SQLException e1)
{
// TODO ???? catch ?
e1.printStackTrace();
}
}
if (con != null)
{
try
{
con.close();
}
catch (SQLException e1)
{
// TODO ???? catch ?
e1.printStackTrace();
}
}

}
return flag;
}
ehai0991 2006-04-12
  • 打赏
  • 举报
回复
我也想学学 ,用存储过程怎么做呢?
guo__peng 2006-04-12
  • 打赏
  • 举报
回复
怎么可以用视图呢?
视图一次只可以更新一个表的数据的,建议用存储过程
liuzhijie0451 2006-04-12
  • 打赏
  • 举报
回复
用回滚语句就可以,只有所有的插入都正常才好使,要不一条也不插入。
feng1071 2006-04-12
  • 打赏
  • 举报
回复
使用及联插入
fashi1000 2006-04-11
  • 打赏
  • 举报
回复
建个视图

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧