【发布时间】:2012-06-26 21:59:39
【问题描述】:
这是我第一次收到此错误。 这段代码基本上得到了在特定日期售出的每件商品的总和。
有解决此问题的提示吗?谢谢。
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)
【问题讨论】:
-
第一件事:不要使用 Vector。曾经!请改用 ArrayList。
-
您没有粘贴足够的堆栈跟踪来查看循环。 SOE 几乎总是无限递归的结果。奇怪的是,这里不是这种情况,解决方案将非常简单:向 JVM 传递一个增加堆栈大小的参数。
-
@Traroth,如果您需要在多线程环境中动态调整数组大小,请使用
Vector? -
请记住,由于您拥有 SOE,因此引发错误的行绝对没有问题。这只是压垮骆驼的最后一根稻草。
-
@AlexLockwood Vector 是同步的,但这本身并不能使其成为线程安全的。这就是反对 Vector 的论点的症结所在:它在锁定上浪费时间,而几乎没有任何好处