Search code examples
javasqlswingjfreechartsqlexception

JFreeChart using numeric query ORACLE ERROR


I was trying to make a query like in that topic: JFreeChart using numeric query ORACLE

to generate a barchart, but i am always receiving that error: java.sql.SQLException: JDBCCategoryDataset.executeQuery() : insufficient columns returned from the database.

My code is as follow:

SELECT CASE WHEN TIME>23.73 AND TIME<=24.0 THEN '23.73<TIME<=24.10' 
    WHEN TIME>24.10 AND TIME<=25.68 THEN '24.10<TIME<=25.68'           
    WHEN TIME>25.68 AND TIME<=27.36 THEN '25.68<TIME<=27.36' 
        ELSE '27.36<TIME'  
   END   || ' with value '|| COUNT(*) v  FROM SWIMMER 
GROUP BY CASE 
WHEN TIME>23.73 AND TIME<=24.10 THEN '23.73<TIME<=24.10' 
WHEN TIME>24.10 AND TIME<=25.68 THEN '24.10<TIME<=25.68'  
WHEN TIME>25.68 AND TIME<=27.36 THEN '25.68<TIME<=27.36' 
ELSE '27.36<TIME'  END

What i am doing wrong?


Solution

  • The SQL you have quoted above results in an error (using SQL Fiddle to check the code) as the two case statements don't match JFreeChart is just re-throwing the error with a misleading message.

    If your SQL is correct JFreeChart is telling you that you need additional columns in your result set as you are concatenating your case statement with the total your query, if it worked, would only return one column.

    Try using this SQL:

    SELECT time_range || ' with value ' || total as category, total
      FROM (SELECT time_range, COUNT(*) AS total
              FROM (SELECT CASE
                             WHEN TIME > 23.73
                                  AND TIME <= 24.0 THEN
                              '23.73<TIME<=24.10'
                             WHEN TIME > 24.10
                                  AND TIME <= 25.68 THEN
                              '24.10<TIME<=25.68'
                             WHEN TIME > 25.68
                                  AND TIME <= 27.36 THEN
                              '25.68<TIME<=27.36'
                             ELSE
                              '27.36<TIME'
                           END AS time_range
                      FROM swimmer)
             GROUP BY time_range)