java - MySQL 内存不足 Java 堆空间

标签 java mysql heap-memory

当我尝试从 MySQL 语句检索一些数据时,我收到上述错误,因为该错误指出错误位于第 118 行;这是 MySQL:

                    .prepareStatement("SELECT orderr.* FROM orderr JOIN person ON orderr.personID = person.personID WHERE person.first_name = ?",java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY, Integer.MIN_VALUE);

第 118 行附近的代码:

            int index = 0;
        if (rs.next()) {
            index++;
            rs.beforeFirst();
            while (rs.next()) {
                for (int i = 1; i < 4; i++) { // retrive column data from order
                    message.append(rs.getInt(i));   //table and append to sb.
                    if(i != 3)message.append(" "); <---line 118.
                }
                if(rs.next()){
                    rs.absolute(index);
                    message.append("\n");
                }
            }
        } 

我得到的确切错误是:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
at java.lang.StringBuffer.append(StringBuffer.java:237)
at stl.Sql.printPersonsOrders(Sql.java:118)
at stl.Main.main(Main.java:19)

只有当我向表中添加了两次相同的数据然后尝试检索时,才会出现此错误,数据量应该只有一两行。

最佳答案

您的rs.absolute(index)将光标移回(到第 1 行),while(rs.next()) 循环永远不会结束。对于只有一行的结果集来说这没有问题,因为结果集偏移量为 1。

关于java - MySQL 内存不足 Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184950/

相关文章:

java - freemarkers 跳过 assertNotNull InvalidReferenceException

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 无法通过 Squirrel 连接到 MySQL - 无法创建连接。检查你的网址

c - 数据存入heap后,如何存入struct而不致栈溢出?

java - 为什么我的 for 循环不传递值?

java - 检查子字符串是否存在于java中的字符串数组列表中

java - C/Java 之间的类似代理系统的实现提示

php、mysql、数组 - if( x == 0 ) { }

c++ - 尝试读取 sizeof() 返回意外结果

java - 为什么并发标记和清除 (CMS) 没有清理与 Full GC 相同数量的内存?