1

在我的应用程序中,我的结果集包含超过 20000 行。我想将其保存到数组列表中。我为此使用下面的代码。

Class.forName("com.mysql.jdbc.Driver") ;
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Data",     "root", "root") ;
  Statement stmt = conn.createStatement() ;
  String query = "select * from temp ;" ;
  ResultSet rs = stmt.executeQuery(query) ;

  ArrayList<String> varList = new ArrayList<String>();
  while(rs.next()){
  varList.add(rs.getString(1));
  }

当我使用查询时,从结果集中获取数据需要更多时间,如果表包含超过 20000 个条目,则速度太慢。如何解决?任何建议都会非常有用。

4

4 回答 4

1

就数据库行而言,20000 并不是一个大数字。

您的问题可能在 ArrayList 中。

默认情况下,ArrayList 有一个默认大小,我不确定有多少,比如 100。当插入的项目超过该数字时,Java 将创建一个新的 arraylist,其大小增加一些值,我不太清楚确定有多少,也说100。然后将先前列表中的内容复制到新列表中。在您的情况下,这些都是字符串操作。所以你可以看到为什么它很慢。执行以下操作可能会解决您的问题。

int rsSize = getResultSetSize(connection,query);  //return the size of the result set first
ArrayList<String> varList = new ArrayList<String>(rsSize);
于 2013-01-08T13:43:29.557 回答
1

我强烈怀疑您正在尝试解决错误的问题。无论您对这 20,000 行做什么,都应该在数据库中执行,并且只将操作的结果(希望这将占用更少的空间)返回给客户端。

如果您确切地告诉我们您要如何处理这些数据,我们或许可以就如何做到这一点提供更具体的建议。

(或者,如果您确实需要客户端的所有 20,000 行,您可能希望完全跳过数据库并将它们存储在客户端。)

于 2013-01-08T12:29:34.087 回答
0

我怀疑您的问题不在于数据库,而可能是列表中的项目连接。您应该为 java 提供更多内存。如果它是 list.add ,那么您可以通过分配结果大小的数组然后使用索引将数据插入数组来加快速度。

于 2013-01-08T12:33:39.213 回答
0

获取后你想对这 20000 条记录做什么。?无论您想做什么,看看您是否可以使用 PL-SQL 代码在 DB 级别完成它。许多程序员不使用 PL-SQL 的强大功能。无论您可以使用其他高级编程语言做什么,其中大多数事情也可以使用 PL-SQL 完成。

于 2013-01-08T12:40:17.083 回答