2016-04-04 29 views
0

この例では、PostgreSQLからバイナリファイルを読み込む方法を見つけました。ファイルにデータを書き込む

conn.setAutoCommit(false); 

     // Get the Large Object Manager to perform operations with 
     LargeObjectManager lobj = ((org.postgresql.PGConnection) conn).getLargeObjectAPI(); 

     ps = conn.prepareStatement("SELECT FILE FROM KNOWLEDGEBASE_FILES WHERE ID = ?"); 
     ps.setInt(1, 333); 
     ResultSet rs = ps.executeQuery(); 
     while (rs.next()) 
     { 
      // Open the large object for reading 
      long oid = rs.getLong(1); 
      LargeObject obj = lobj.open(oid, LargeObjectManager.READ); 

      // Read the data 
      byte buf[] = new byte[obj.size()]; 
      obj.read(buf, 0, obj.size()); 
      // Do something with the data read here 


      FileChannel rwChannel = new RandomAccessFile("License_Agreement.pdf", "rw").getChannel(); 
      ByteBuffer wrBuf = rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, buffer.length * number_of_lines); 
      for (int i = 0; i < obj.size(); i++) 
      { 
       wrBuf.put(obj); 
      } 

      // Close the object 
      obj.close(); 
     } 
     rs.close(); 
     ps.close(); 

     // Finally, commit the transaction. 
     conn.commit(); 

どのようにNIOを使用してファイルにデータを書き込むことができますか?このラインwrBuf.put(obj);

私はエラーを取得する:プットが見つかり

もし適切な方法(のLargeObject) 方法ByteBuffer.put(バイト)が適用 (引数の不一致;のLargeObjectはバイトに変換することはできません)ではないん 方法 方法ByteBuffer.put(バイト[])適用 (引数ミスマッチ;れるLargeObjectは[]のバイトに変換できない)ではない。ByteBuffer.put(のByteBuffer)は(れるLargeObjectがのByteBufferに変換できない引数の不一致) 適用されない

答えて

2

あなた使用できますLargeObject::getInputStream

+0

何らかの理由で、コードを実行した後にファイルが作成されません。 –

+0

ファイルは書き込み可能ではなく、ユーザーに必要な権利がありますか?スタックトレースを取得しましたか? –

+0

はい、書き込み制限はありません –

関連する問題