java 怎么多表同时插入到数据库啊?

 其穗茹 发布于 2022-10-25 05:34
  • php
  • 4 个回答
    • 框架的好处就体现出来了,会帮你做重复的操作

      2022-10-26 14:17 回答
    • 可以用addBatch()批量处理语句

      2022-10-26 14:17 回答
    • 多条相关联的记录用这种方法肯定是要一行一行写的,你可以自己封装一下,看起来应该好不了多少,还是用的orm框架吧,可读性好些。

      2022-10-26 14:18 回答
    • JDBC本身支持批量更新,具体API如下:

      addBatch(String sql):Statement类的方法, 可以将多条sql语句添加Statement对象的SQL语句列表中
      addBatch():PreparedStatement类的方法,可以将多条预编译的sql语句添加到PreparedStatement对象的SQL语句列表中
      executeBatch():把Statement对象或PreparedStatement对象语句列表中的所有SQL语句发送给数据库进行处理
      clearBatch():清空当前SQL语句列表

      使用批量更新API,我将你的代码调整如下:(注:如果SQL列表包含过多的待处理SQL语句, 可能会产生OutOfMemory错误。所以需要及时处理SQL语句列表。)

      public class AddBatchSql {
      
          public void add(String fid,String title,String content){
              Connection connection = null;
              Statement stmt = null;
              String sql1 = null;
              String sql2 = null;
      
              try{
                  connection = ConnectionUtils.getConnection();
                  stmt = connection.createStatement();
                  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                  String dateValue = simpleDateFormat.format(new Date());
                  sql1 = "insert into news_base(fid,title,date,author) values("+fid+",'"+title+"','"+dateValue+"','Admin')";
                  sql2 = "insert into news_content (cid,content) values("+fid+",'"+content+"')";
                  List<String> sqlList = new ArrayList<String>();
                  sqlList.add(sql1);
                  sqlList.add(sql2);
                  for (int i = 0; i < sqlList.size(); i++) {
                      String sql = sqlList.get(i);
                      stmt.addBatch(sql);
                      if (i==500) {
                          stmt.executeBatch();//为避免出现OutOfMemory错误,及时处理
                          stmt.clearBatch();//清空列表
                      }
                  }
                  //最后一次列表不足500条,处理
                  stmt.executeBatch();
              }catch(Exception e){
                  e.printStackTrace();
              }finally{
                  if(stmt != null){
                      try{
                          stmt.close();
                      }catch(Exception e){
                          e.printStackTrace();
                      }
                  }
              }
          }
          
      }
      2022-10-26 14:18 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有