繁体   English   中英

Spring JdbcDao支持

[英]Spring JdbcDaoSupport

请帮我! 我有麻烦了。 我下一个SQL查询

SET @sql = '';

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT( 
      'getInterviewsNumber(\'', name, 
'\', vtable.position)',
' AS \'',
      name, '\''
    ) separator ','
  ) INTO @sql
FROM interview_portal.departments;


SET @sql = CONCAT('SELECT distinct vtable.position,  ',@sql, ' FROM inter_count as vtable');

PREPARE stmt FROM @sql;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;

它在MySQL工作台中运行良好。 但是如何使用Spring JdbcDaoSupport执行此查询并获取ResultSet? 我已经尝试了很多变体,但是我遇到了MySQLSyntaxErrorException。

谢谢你的帮助!

这是我的例外

SEVERE: Servlet.service() for servlet [generalDispatcher] in context with path [/InterviewPortal] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SET @sql = ''; SELECT GROUP_CONCAT( DISTINCT CONCAT ( 'getInterviewsNumber(\'', name, '\', vtable.position)',' AS \'', name, '\'')  separator ',') INTO @sql FROM interview_portal.departments; SET @sql = CONCAT('SELECT distinct vtable.position, ', @sql, ' FROM inter_count as vtable'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT GROUP_CONCAT( DISTINCT CONCAT ( 'getInterviewsNumber(\'', name, '\', vtab' at line 1] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT GROUP_CONCAT( DISTINCT CONCAT ( 'getInterviewsNumber(\'', name, '\', vtab' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

这是我的代码:

String sql = "SET @sql = '';" +
                " SELECT" +
                " GROUP_CONCAT(" +
                " DISTINCT CONCAT ( " +
                "'getInterviewsNumber(\\'', name, " +
                "'\\', vtable.position)'," +
                "' AS \\'', name, '\\'') " +
                " separator ',') INTO @sql " +
                "FROM interview_portal.departments;" +
                " SET @sql = CONCAT('SELECT distinct vtable.position, '," +
                " @sql, ' FROM inter_count as vtable');" +
                " PREPARE stmt FROM @sql;" +
                " EXECUTE stmt;" +
                " DEALLOCATE PREPARE stmt;" ;
        getJdbcTemplate().batchUpdate(temp);
                //"ORDER BY " + query.getSortType().getColumnName() + ((query.isDescendingSort()) ? " DESC" : " ASC;");
        Object[] args = new Object[0];
        return getJdbcTemplate().query(sql, args,
                positionItemMapper);

首先,您必须使用SQL代码创建存储过程,请参见MySQL文档

然后,您可以使用JDBC模板调用它:

jdbcTemplate.update("call PROC_NAME (?, ?)", param1, param2);

有关更多详细信息,请参见Spring文档

Spring JdbcDaoSupport允许您一次执行一个查询 您要执行的是一个完整的过程。 您可以将过程存储在MySQL中,然后按照cy3er的建议进行调用,也可以将其分解为单独的操作。

如果我正确地理解到,首先有一个SELECT ... INTO ...操作将导致update ,然后是一个SELECT ...将导致query

就像在Java中一样,您甚至应该在执行第二个操作之前测试第一个操作是否给出正确的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM