我可以访问一个Java库,让我传递一个OutputStream对象,然后向它写一个报告。报告由数据组成,每列由制表符分隔,每条记录在新行上,即换行符分隔。目前我正在传递一个fileOutput流,如下所示。我需要最终将数据插入数据库中。我希望直接将数据插入数据库,而不是写入文件。实现这一目标的最佳方法是什么?改写:我想直接将OutputStream中的数据插入到数据库中,而不必先将其放入文件中。我的目标是假设它会提高性能。
OutputStream report = null;
try {
report = new FileOutputStream( "report-" + sellerID + ".xml" );
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setReportOutputStream( report );
答案 0 :(得分:0)
而不是ORA-01427: single-row subquery returns more than one row ORA-06512: at
"SYS.DBMS_SQL", line 1721
(写入外部文件)
你可以使用ByteArrayOutputStream
(写入内存中的字节数组)。
FileOutputStream
之后,您可以将ByteArrayOutputStream report = new ByteArrayOutputStream();
request.setReportOutputStream(report);
// let request write into the OutputStream
byte[] byteArray = report.toByteArray();
写入数据库,或者按照自己喜欢的方式进行操作。
答案 1 :(得分:0)
简单的方法是传递ByteArrayOutputStream
(根据Thomas Fritsch的回答)。如果数据不是太大,这将是我的选择。如果是,您不希望通过创建一个巨大的中间字节数组来耗尽堆空间。相反,只要报表编写者将数据写入输出流,就可以将数据直接写入数据库。为此,您需要创建自己的特殊OutputStream:
public class DatabaseOutputStream extends OutputStream {
// See the source code for ByteArrayOutputStream to see how to implement your class.
// You'll basically need to write a record to the database every time you receive a
// line separator.
}
OutputStream dbos = new DatabaseOutputStream(/*db connection params*/);
request.setReportOutputStream(dbos);