2016-12-01 76 views
0

我试图使用vert.x插入BLOB到Oracle数据库中,我得到的上传文件如何使用Vert.x将Blob插入到Oracle数据库11g中?

 for (FileUpload f : routingContext.fileUploads()){ 
     System.out.println("file name " + f.fileName()); 
     System.out.println("size name " + f.size()); 
     System.out.println("Uploaded File " + f.uploadedFileName()); 
    } 

我以转换文件上传到字节数组:

Buffer fileUploaded = routingContext.vertx().fileSystem().readFileBlocking(f.uploadedFileName()); 

byte[] fileUploadedBytes = fileUploaded.getBytes(); 

现在我想直接将它插入Oracle数据库,我试图使用updateWithParams,但我不知道如何将Blob添加到查询参数中。 感谢您的帮助

+0

看一看这个[问题](http://stackoverflow.com/questions/8348427/how-to-write-update-oracle-blob-in-a-reliable-way)。它解释了如何通过jdbc在oracle db中插入Blob – ZeusNet

+0

谢谢@ZeusNet的回答,但是我使用'JDBCClient Vertx',所以我必须使用'queryWithParams'来创建'preparedStatement'然后我不能调用'setBinaryStream'。 – OLH

+0

但你可能可以将文件的字节包装到JsonArray中?我不熟悉vert.x,但我会试一试 – ZeusNet

回答

1

这是我的实现来解决我的问题,现在我可以将文件Blob插入到Oracle数据库中,我希望这将有助于未来的人。

ByteArrayInputStream finalBis = bis; 
    byte[] finalFileUploadedBytes = fileUploadedBytes; 
    DB.getConnection(connection -> { 
     if (connection.succeeded()) { 
      CallableStatement stmt = null; 
      try { 
       stmt = connection.result().getConnection().prepareCall(SQL.INSERT_DOCS_QUERY); 
       stmt.setBinaryStream(1, finalBis, finalFileUploadedBytes.length); 
       stmt.setString(2,desiDoc); 
       stmt.setString(3,sourDoc); 
       logger.debug(stmt); 
       stmt.execute(); 
       finalBis.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      System.out.println("nooot ok"); 
     } 
    }); 
相关问题