如何使用outputstream对象在数据库中插入记录。

时间:2018-03-14 17:56:54

标签: java outputstream

我可以访问一个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 );

2 个答案:

答案 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);