Java 使用MySQL查询考勤月报

Java 使用MySQL查询考勤月报,java,mysql,Java,Mysql,我有这样的用户表 user_id | user_name --------+---------- 1 | peter 2 | robert 3 | stive id | user_id | status | date ---+---------+--------+----------- 1 | 1 | p | 12-16-2014 2 | 2 | p | 12-16-2014 3 | 3 |

我有这样的用户表

user_id | user_name
--------+----------
      1 | peter
      2 | robert
      3 | stive
id | user_id | status |   date
---+---------+--------+-----------
 1 |       1 |     p  | 12-16-2014
 2 |       2 |     p  | 12-16-2014
 3 |       3 |     a  | 12-16-2014
 4 |       1 |     p  | 12-17-2014
 5 |       2 |     a  | 12-17-2014
 6 |       3 |     a  | 12-17-2014
 7 |       1 |     p  | 12-18-2014
 8 |       2 |     a  | 12-18-2014
 9 |       3 |     p  | 12-18-2014
还有像这样的考勤表

user_id | user_name
--------+----------
      1 | peter
      2 | robert
      3 | stive
id | user_id | status |   date
---+---------+--------+-----------
 1 |       1 |     p  | 12-16-2014
 2 |       2 |     p  | 12-16-2014
 3 |       3 |     a  | 12-16-2014
 4 |       1 |     p  | 12-17-2014
 5 |       2 |     a  | 12-17-2014
 6 |       3 |     a  | 12-17-2014
 7 |       1 |     p  | 12-18-2014
 8 |       2 |     a  | 12-18-2014
 9 |       3 |     p  | 12-18-2014
但我想展示如下结果

user_id | user_name   | 12-16-2014 | 12-17-2014 | 12-18-2014
--------+-------------+------------+------------+-----------
      1 | peter       |          p |          p |         p
      2 | robert      |          p |          a |         a
      3 | stive       |          a |          a |         p
选择应基于月或周,具体取决于用户提供的日期

我试着像这样用java执行查询,但它不起作用

String setsqlMax = "SET SESSION group_concat_max_len = 100000000000;";
        String setsql ="SET @sql = NULL;";
        String dynamicsql = 

                       "SELECT"+
                       " GROUP_CONCAT(DISTINCT"+
                       " CONCAT("+
                       "'max(CASE WHEN attendance.attendance_date = ''',"+
                       " date_format(date, '%Y-%m-%d'),"+
                       " ''' THEN coalesce(p.present, '''') END) AS `',"+
                       " date_format(date, '%Y-%m-%d'), '`'"+
                       ")"+
                       " ) INTO @sql"+
                       " FROM calendar"+
                       " where date>='01-01-2015'"+
                       "  and date <= '31-01-2015';";


        String mainsql   =  "SET @sql = CONCAT('SELECT p.user_id,',@sql,'"+
                        " from"+
                        "("+
                        "select c.user_id"+
                        " from calendar c"+
                        " cross join attendance a"+
                        " )"+
                        " attendance LEFT JOIN attendance p"+
                        " on attendance.user_id= p.user_id"+
                       " and attendance.date = p.attendance_date"+
                       " where attendance.date>=''01-01-2015''"+
                       "  and attendance.date <= ''31-01-2015''"+
                       " group by attendance.user_id') ;";
           String preparesql = " PREPARE stmt FROM @sql";
           String ExcuteSql = "EXECUTE stmt ;";
           String deallocateSql = "DEALLOCATE PREPARE stmt;";
 String totalQuery = setsqlMax + setsql + dynamicsql + mainsql + preparesql+ ExcuteSql + deallocateSql; 

这可能与我通过传递MySQL浏览器中完美执行的查询的动态日期,尝试使用pivot表将行转换为列的情况相同,但当我尝试使用java时,它显示错误显示代码和错误消息。