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-したがって、37行目で問題が発生しますStatistic.java

于 2012-06-25T16:11:48.493 に答える
2

::を削除します

JVMは文字列プーリングを使用するため、クエリからの文字列'+'は、文字列のタイプごとに、その文字列が存在するかどうかを確認するためにサービスを呼び出します。

代わりにStringBuilderを使用してください。

スティーブが前述したように、Vectorを削除し、ArrayListに置き換えます。不明な再帰が発生したコードスニペットを確認してください。

于 2012-06-25T16:11:44.223 に答える