gpt4 book ai didi

java - 在 Oracle DB 上执行 PreparedStatement 插入 Blob 时出现 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:07 25 4
gpt4 key购买 nike

有没有人知道我在这里做错了什么?我正在尝试将一个 blob(其中包含一个 pdf,以防万一)连同一些其他信息一起插入到 oracle 数据库中。我正在使用 PreparedStatement

代码:

public void saveReportErgebnis(int reportId, Date erzeugung, int archiv,
Blob pdf, String kommentar) throws Exception {

ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] tmp = new byte[(int) pdf.length()];
if(kommentar == null){
kommentar = "";
}

SimpleDateFormat erstellungSdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");

try {
pdf.getBinaryStream().read(tmp);

oracle.sql.BLOB oracleBlob = new oracle.sql.BLOB((OracleConnection) getConnection(), tmp);
PreparedStatement prepStmt = getRTTDBHandler()
.createPreparedStatement(
"INSERT INTO reportergebnis(report_id, erzeugung, archiv, pdf, kommentar) VALUES (?,?,?,?,?)");
System.out.println("debug 2 oracle");
prepStmt.setInt(1, reportId);
prepStmt.setString(2, formatDateString(erstellungSdf.format(erzeugung)));
prepStmt.setInt(3, archiv);
prepStmt.setBlob(4, oracleBlob);
prepStmt.setString(5, kommentar);
prepStmt.execute();
} catch (Exception e) {
e.printStackTrace();
loghandler.error(e.toString());
throw e;
}

}

(formatCode 以正确的形式放置日期,例如返回:
日期 to_date('2013-04-15 09:34:38','yyyy-mm-dd hh24:mi:ss')

执行 PrepStatement 时出现以下异常:

{java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at oracle.jdbc.driver.DatumBinder.bind(OraclePreparedStatement.java:18279)
at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:3137)
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2355)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3579)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1088)
at com.nundp.mc.modules.regressionsTest.db.OracleRTTDBHandler.saveReportErgebnis(OracleRTTDBHandler.java:963)
at com.nundp.mc.modules.regressionsTest.report.ReportController.executeReport(ReportController.java:237)
at org.apache.jsp.jsp.modules.Testszenario.ReportHandler_jsp._jspService(ReportHandler_jsp.java:156)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.jsp.McFrame_jsp._jspService(McFrame_jsp.java:284)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)}

我使用的是 Oracle 数据库 10g 10.2.0.3.0 版。请帮忙!

最佳答案

在我的应用程序中,我使用 File 而不是 Blob 作为方法输入,并以这种方式插入 BLOB:

public void insertBlob(String filedesc, File file) {
Connection con = DriverManager.getConnection(url, username, password);

InputStream input = new FileInputStream(file);

PreparedStatement pstmt = con.prepareStatement(
"insert into schema.table values(?,?)");
pstmt.setString(1, filedesc);
pstmt.setBinaryStream(2, input);

pstmt.execute();
}

也许您需要一些try-catch,但我希望这对您有所帮助。

关于java - 在 Oracle DB 上执行 PreparedStatement 插入 Blob 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com