次のコードを使用して、toBlobフィールドを使用java.sql.PreparedStatement
してPDFファイルをアップグレードしようとしました。mysql
File inFile = new File("Path+BLOCK.pdf");
byte[] b = new byte[(int)inFile.length()];
PreparedStatement psmnt = (PreparedStatement)
con.prepareStatement("INSERT INTO
2012DOC (SRNO,DOCUMENT)
VALUES (?,?)"
); //con is java.sql.Connection object
psmnt.setString(1, "1200021");
psmnt.setBytes(2, b);
psmnt.executeUpdate();
このコードはエラーなしで実行され、データベースにはBLOBコンテンツが表示されますが、以下のコードを使用してファイルを取得しようとすると、開いていない破損したファイルが表示されます。
ResultSet rs=con.Execute("SELECT DOCUMENT FROM 2012DOC");
rs.next();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=kjsahkjd.pdf");
java.sql.Blob blob = rs.getBlob("DOCUMENT");
ServletOutputStream servletOutputStream = response.getOutputStream();
InputStream in = blob.getBinaryStream();
int length = (int) blob.length();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while ((length = in.read(buffer)) != -1) {
servletOutputStream.write(buffer, 0, length);
}
in.close();
servletOutputStream.flush();
servletOutputStream.close();
元のファイルと同じサイズのファイルを出力しますが、ファイルは開きません。リーダーは起動されpdf
ますが、ファイルを開くことができず、エラーが発生します'ファイルが破損しているか、サポートされていないファイルタイプ'