3

这是我第一次收到此错误。此代码基本上获取在特定日期售出的每件商品的总和。

有关解决此问题的任何提示?谢谢。

       Statement statement = connection.createStatement();
       String query = "SELECT itemcode, SUM(quantity) AS 'Total Sales Per Day' "
               + "FROM sales "
               + "WHERE real_pur_date = '" + date + "' "
               + "GROUP BY itemcode ";
       ResultSet rs = statement.executeQuery( query ); // this line gets the error / exception
       while( rs.next() ){
           Vector row = new Vector();
           row.add( rs.getString( "itemcode" ) );
           row.add( rs.getInt( "Total Sales Per Day" ) );
           dailyData.add( row );
       }
       statement.close();
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at com.mysql.jdbc.Util.handleNewInstance(Util.java:431)
at com.mysql.jdbc.ResultSetImpl.getInstance(ResultSetImpl.java:383)
at com.mysql.jdbc.MysqlIO.buildResultSetWithRows(MysqlIO.java:3140)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:491)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3118)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2288)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2709)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2677)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2627)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1556)
at posinventory.Controller.StatisticEngine.getDailyData(StatisticEngine.java:20)
at posinventory.Statistic.refreshTableDailyStat(Statistic.java:36)
at posinventory.Statistic.refreshTableDailyStat(Statistic.java:37)
at posinventory.Statistic.refreshTableDailyStat(Statistic.java:37)
at posinventory.Statistic.refreshTableDailyStat(Statistic.java:37)
4

3 回答 3

5

我不认为您包含的代码片段是问题所在。查看堆栈跟踪的底部,我看到 Statistic.java:37 显然多次调用自己。允许递归调用,但如果不加以控制,它们会导致堆栈溢出。看起来你有一个循环......

于 2012-06-25T16:06:52.420 回答
4

你真的应该从 发布代码posinventory.Statistic.refreshTableDailyStat,但我猜一下:在那个方法中,第 36 行调用StatisticEngine.getDailyData;第 37 行refreshTableDailyStat递归调用 - 所以这是你的问题,Statistic.java第 37 行。

于 2012-06-25T16:11:48.493 回答
2

去除那个 ::

查询中的字符串“+”,因为 JVM 使用字符串池,对于每种类型的字符串,它都会调用服务来检查该字符串是否存在。

请改用字符串生成器。

删除 Vector 并将其替换为 ArrayList,正如 Steve 上面提到的,检查发生未知递归的代码片段。

于 2012-06-25T16:11:44.223 回答