这是我第一次收到此错误。 此代码基本上获取在特定日期销售的每件商品的总和。
有关解决此问题的任何提示?感谢。
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)
答案 0 :(得分:5)
我认为您提供的代码段不是问题所在。查看堆栈跟踪的底部,我看到Statistic.java:37显然多次调用自己。允许递归调用,但如果它们不受控制,则会导致堆栈溢出。看起来你有一个循环...
答案 1 :(得分:4)
你真的应该发布posinventory.Statistic.refreshTableDailyStat
的代码,但我会猜测:在那个方法中,第36行调用StatisticEngine.getDailyData
;第37行递归调用refreshTableDailyStat
- 所以你的问题是Statistic.java
,第37行。
答案 2 :(得分:2)
删除::
查询中的字符串'+',因为JVM使用字符串池,对于它调用服务的每种类型的字符串来检查该字符串是否存在。
改为使用String Builder。
删除Vector并将其替换为ArrayList,正如Steve上面提到的那样,检查代码片段中发生了未知的递归。