【问题标题】:Spring JdbcTemplate "insert into.. select from.." not workingSpring JdbcTemplate“插入..从中选择..”不起作用
【发布时间】:2017-09-13 10:11:38
【问题描述】:

我正在尝试使用 Spring JdbcTemplate 执行以下 SQL:

INSERT INTO japan_wht.PIVOT_20427002(doc_header_text, value_date, total_amt, is_refund)                    
 (SELECT 
    doc_header_text, DATE(value_date), SUM(LOCAL_CCY_AMT), is_refund
 FROM
    (SELECT 
        *
    FROM
        japan_wht.DATA_20427002
    WHERE IS_REFUND in ('N')
    ) t 
GROUP BY DATE(value_date) , doc_header_text, is_refund)

但是,它不会向数据库表中插入任何内容,也不会抛出任何错误。

当我尝试使用 JdbcTemplate 执行以下 SQL 时,它可以工作并将数据插入 DB 表中:

INSERT INTO japan_wht.PIVOT_20427002(id, doc_header_text, value_date, total_amt, is_refund) values('1', '1', '2017-12-31', 3000, 'Y');

以下是我执行上述 SQL 的调用:

jdbcTemplate.update(sqlString);

不知道这里出了什么问题。

【问题讨论】:

  • 可以告诉我们sqlString好吗?
  • 你得到什么样的异常?你能手动运行这个SELECT INTO 吗?
  • @YCF_L: sqlString 是我给出的有问题的 SQL...
  • @Tamas Rev:我没有遇到任何异常。只是数据没有被插入。手动运行时选择语句会返回数据...
  • 在 DB 客户端程序(SqlSquirrel、DB Visualizer 等)中运行 select 语句,看看它是否返回任何行。

标签: java mysql spring spring-boot jdbctemplate


【解决方案1】:

我不得不求助于普通的 JDBC,它成功了:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mySchema?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true",
    "root", "root");
Statement stmt = conn.createStatement();
int flag = stmt.executeUpdate(sqlString);
LOGGER.info("Flag = {}", flag);

不知道为什么 Spring JdbcTemplate 不能处理这样的事情!

【讨论】:

  • 你有答案为什么 jdbc 模板 dint 工作.. 是什么问题
【解决方案2】:

您可以使用execute 方法。喜欢:

jdbcTemplate.execute("INSERT INTO table1 (some_id, some_key, some_text) " +
      "SELECT id, key, text from table2 t2 " +
      "LIMIT ?", (PreparedStatementCallback<Boolean>) ps -> {
                      ps.setInt(1, 400);
                      return ps.execute();
                  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2012-07-01
    • 2017-07-24
    • 2018-02-19
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多