Quelqu'un a-t-il une idée de ce que je fais mal ici? J'essaie d'insérer une blob (contenant un PDF dans le cas où cela compte) dans une DB Oracle avec quelques informations supplémentaires. J'utilise un système préparé
Code: p> (le code de format met la date dans le bon formulaire, par exemple pour un retour: Lorsque la préparation est exécutée, je reçois l'exception suivante: P>
Date to_date ('2013-04-15 09:34:38', 'yyyy-mm-dd HH24: MI: ss')
p> {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)}
5 Réponses :
Essayez d'utiliser * CreateTemporary (YourConnection, False, oracle.sql.blob.Duration_CALL) * Fonction sur l'oracle.sql.blob pour créer votre instance. Après cela, utilisez simplement les Setbytes (...) pour définir son contenu. P>
Une remarque: J'aurais attendu un simple: p> prépstmt.setdate (2, erzeugung); code> est plus simple.
InputStream blobIS = pdf.getBinaryStream();
prepStmt.setBlob(4, blobIS, pdf.length());
... pdf.free();
dans mon application, j'ai utilisé un fichier code> au lieu d'un
blob code> pour l'entrée méthode et avez effectué l'insert de blob de cette manière:
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();
}
+1. Dans mon expérience, utiliser Setbilararintream () fonctionne beaucoup mieux que l'une des alternatives
Je pense que vous devez faire des chèques sanitaires avant d'utiliser SetBlob () Strong> P>
Cependant, je préférerais vous recommander de stocker uniquement l'URL dans la base de données plutôt que de stocker les données binaires du fichier. P>
Pour les futures chercheurs, voici comment j'ai résolu le problème de la blob: merci beaucoup tout le monde pour l'aide. p> p>
Qu'est-ce qui est à la ligne 963 de
oraclertdbhandler code>?
Peut-être [ceci] [1]. [1]: Stackoverflow.com/questions/277744/... espérons que cela aide, yaron
Mais c'est pour plus de 7 paramètres de position?
Pouvez-vous changer la commande et essayer? Peut-être blob comme dernier paramètre?
YARON: J'ai déjà regardé celui-là, mais comme noob dit, c'est si vous travaillez avec plus de 7 paramètres ou que je manque quelque chose? Noob: j'ai essayé, cela n'a rien changé
Ou existe-t-il peut-être une autre façon d'exécuter cette tâche?
Votre titre dit NullPointerException mais je ne vois aucune nulpointeException.