如何用java从数据库中读取大量数据并写入文件?

如何用java从数据库中读取大量数据并写入文件?,java,derby,Java,Derby,我有一个derby数据库,至少有2GB的数据,我必须读取这些数据并写入文本文件。现在,有些列可能是blob数据类型 我目前的方法是以10(比方说)的批量大小一次从一个表中读取数据,并将数据(字符串列表)放入最大大小为10的数组阻塞队列中。从队列中,线程将逐个拾取元素并写入文件 我面临以下问题, 1. how to fetch 10 rows from a table in a single hit and fetch next 10 rows in second hit and so o

我有一个derby数据库,至少有2GB的数据,我必须读取这些数据并写入文本文件。现在,有些列可能是blob数据类型

我目前的方法是以10(比方说)的批量大小一次从一个表中读取数据,并将数据(字符串列表)放入最大大小为10的数组阻塞队列中。从队列中,线程将逐个拾取元素并写入文件

我面临以下问题,

  1. how to fetch 10 rows from a table in a single hit and fetch next 10 rows in second
  hit and so on.
  2. how to convert blob and binary data into string 

您无法明确地执行此操作。但是您可以设置fetchSize。这个参数是对JDBC驱动程序的一个提示,提示从数据库一次获取多行。但是司机可以自由地忽略这一点,做它认为合适的事情。一些驱动程序以块的形式获取行,而一些驱动程序只是一次性读取整个结果集


使用fetch size(取决于驱动程序)将缓冲数据,因此在性能方面没有问题,因为它隐式地为您执行分块。因此,我们从resultset获取数据的方式基本上没有区别。

您无法明确地做到这一点。但是您可以设置fetchSize。这个参数是对JDBC驱动程序的一个提示,提示从数据库一次获取多行。但是司机可以自由地忽略这一点,做它认为合适的事情。一些驱动程序以块的形式获取行,而一些驱动程序只是一次性读取整个结果集


使用fetch size(取决于驱动程序)将缓冲数据,因此在性能方面没有问题,因为它隐式地为您执行分块。因此,从resultset获取数据的方式基本上没有区别。

base64编码通常用于将二进制数据放入需要ascii(如电子邮件附件)的容器中。Apache commons编解码器包括一个base64实现base64编码通常用于将二进制数据放入需要ascii(如电子邮件附件)的容器中。Apache commons编解码器包含一个base64实现您是对的…如果我们假设setFetchSize()可以工作…我们需要为此设置循环?是的,您需要以常规方式循环resultset(resultset.next())您是对的…如果我们假设setFetchSize()可以工作…我们需要为此设置循环?是的,您需要以常规方式循环resultset(ResultSet.next())