[Fwd: Re: Problems with truncated BLOB] - Mailing list pgsql-jdbc
| From | Barry Lind |
|---|---|
| Subject | [Fwd: Re: Problems with truncated BLOB] |
| Date | |
| Msg-id | 3C028151.8020301@xythos.com Whole thread Raw |
| List | pgsql-jdbc |
Forwarding to the jdbc list in case someone else has time to look into
this bug before I get around to it.
thanks,
--Barry
-------- Original Message --------
Subject: Re: [JDBC] Problems with truncated BLOB
Date: 26 Nov 2001 17:37:05 +0100
From: Mihael Vrbanec <miqster@gmx.net>
To: Barry Lind <barry@xythos.com>
References: <1006737949.367.2.camel@Caprice> <3C01A2AA.2030902@xythos.com>
Hi Barry,
> Could you send a test case that demonstrates the problem? Ideally a
> sample java program that will upload one of the problem files, and then
> another program that tries to download the file showing the problem you
> have having.
I have attached a sample program that does both. It uses a table called
blobs with two columns (filename, data). I experience the problem with
all binary files I have tried (.doc, .png, .bmp, .tar.gz).
HTML, and .txt do not have these problems.
> Also, which version of the jdbc driver are you using? (the version that
> came with 7.1, or something newer)
The jdbc-driver is the one shipped with 7.1.2/3 (i compiled the whole
thing from source).
many thanx in advance
bxe Miq
--
** Mihael Vrbanec --- Uni Karlsruhe **
*** eMail: miqster@gmx.net ***
** Homepage: miqster.homeip.net/~miq/ **
import java.io.*;
import java.util.*;
import java.sql.*;
public class BlobTest {
private Connection con = null;
public BlobTest() {
try {
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection(
"jdbc:postgresql:repository", "candle", "");
if (con != null) {
System.out.println("Connected to database system.\n");
}
} catch (SQLException e) {
System.out.println(e.getMessage());
System.out.println("Could not connect to database system.\n");
} catch (ClassNotFoundException e) {
System.out.println("Class not found...:-(\n");
}
}
private void store(String filename) {
PreparedStatement ps = null;
ResultSet r = null;
File file = new File(filename);
System.out.println("file.name:" + file.getName() + "file.length:"+file.length());
try {
FileInputStream fis = new FileInputStream(file);
con.setAutoCommit(false);
ps = con.prepareStatement(
"INSERT INTO blobs VALUES (?, ?)");
ps.setString(1, filename);
System.out.println("File.length(int): " + (int) file.length());
ps.setBinaryStream(2, fis, (int) file.length());
ps.executeUpdate();
ps.close();
fis.close();
con.commit();
} catch (SQLException sqle) {
System.err.println("Store content: " + sqle.getMessage());
} catch (IOException ioe) {
}
}
private void retrieve(String filename) {
Statement s = null;
ResultSet r = null;
int byteSum = 0;
int bytesRead = 0;
byte[] buffer = new byte[8 * 1924];
try {
System.out.println("Trying to write: " +filename + "test");
FileOutputStream out = new FileOutputStream(filename + "test");
con.setAutoCommit(false);
s = con.createStatement();
r = s.executeQuery("SELECT data FROM blobs WHERE filename = '"
+ filename +"'");
if (r != null) {
while (r.next()) {
System.out.println("We have a result!");
InputStream is = r.getBinaryStream(1);
while ((bytesRead = is.read(buffer)) != -1) {
byteSum += bytesRead;
out.write(buffer, 0, bytesRead);
}
is.close();
}
}
out.close();
System.out.println("bytes written: " + byteSum);
con.commit();
} catch (SQLException sqle) {
System.err.println("Retrieve content: " + sqle.getMessage());
} catch (Exception ioe) {
System.err.println("Writing stuff: " + ioe.getMessage());
}
}
public static void main(String[] args) {
BlobTest bt = new BlobTest();
bt.store(args[0]);
bt.retrieve(args[0]);
}
}
pgsql-jdbc by date: