6
votes

NullPointerException lors de l'exécution de la constitution sur Oracle DB pour insérer Blob

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> xxx pré>

(le code de format met la date dans le bon formulaire, par exemple pour un retour:
Date to_date ('2013-04-15 09:34:38', 'yyyy-mm-dd HH24: MI: ss')
p>

Lorsque la préparation est exécutée, je reçois l'exception suivante: 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)}


7 commentaires

Qu'est-ce qui est à la ligne 963 de oraclertdbhandler ?


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.


5 Réponses :


0
votes

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.


0 commentaires

0
votes

Une remarque: prépstmt.setdate (2, erzeugung); code> est plus simple.

J'aurais attendu un simple: p>

InputStream blobIS = pdf.getBinaryStream();
prepStmt.setBlob(4, blobIS, pdf.length());

... pdf.free();


0 commentaires

1
votes

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 commentaires

+1. Dans mon expérience, utiliser Setbilararintream () fonctionne beaucoup mieux que l'une des alternatives



0
votes

Je pense que vous devez faire des chèques sanitaires avant d'utiliser SetBlob ()

  1. Vérifiez le nombre de paramètres dans votre table de base de données
  2. Vérifiez la position de la blob.

    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.


0 commentaires

0
votes

Pour les futures chercheurs, voici comment j'ai résolu le problème de la blob: xxx

merci beaucoup tout le monde pour l'aide.


0 commentaires