我正在编写一种方法,通过 Web 服务接收逗号分隔的文本文件作为 InputStream。我使用以下 SQL 脚本创建了我的表:
CREATE SEQUENCE FILE_NUMBER_SEQ
INCREMENT BY 1
START WITH 1
MINVALUE 1
NOMAXVALUE;
CREATE TABLE FILES
(
ID NUMBER NOT NULL ,
FILE CLOB NOT NULL
);
在我的单元测试中,我使用以下代码生成 CSV。我无法在可能运行测试的机器上创建管理员权限文件 b/c:
String simulatedCSVFile = new String("col1,col2\\ndata1,data2");
InputStream stream = new ByteArrayInputStream(
simulatedCSVFile.getBytes("UTF-8"));
我的方法目前看起来是这样的:
public void uploadCSVFile(InputStream stream) {
try {
Connection conn = null;
PreparedStatement preparedStmt = null;
conn = db.getDataSource().getConnection();
conn.setAutoCommit(false);
String sql = "INSERT INTO FILES(ID,FILE) VALUES(FILE_NUMBER_SEQ.NEXTVAL,?)";
preparedStmt = conn.prepareStatement(sql);
preparedStmt.setAsciiStream(1, stream);
int count = preparedStmt.executeUpdate();
}
}
当我执行测试它的方法时,调用 setAsciiStream 时出现异常,显示“消息有效负载的类型:jetty.HttpParser”。
知道如何转换流以便将其添加到 CLOB 的 SQL 中吗?
最佳答案
你能试试 PreparedStatement
的 InputStreamReader
和 setCharacterStream
方法吗?
关于java - 如何使用 JDBC 将 InputStream 插入到 CLOB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635926/