problems with getting blob from database  
Author Message
Pounce





PostPosted: 2006-8-1 3:54:00 Top

java-programmer, problems with getting blob from database I`m writing from file to blob. Than I need to get blob content again
and write it to file. When I open this file, I see the wrong symbols.
Can anybody help me?
Here is my code:

////////////////////////////
to update file content
///////////////////////////

private void updateFileContent(File serverFile, java.io.File
clientContentFile) throws MainException
{
PreparedStatement preparedStatement = null;
try
{

connection = connect();
String query = "update panta_file_substance\n" +
"set content = ?\n" +
"where\n" +
" file_id = ?"
preparedStatement = getPreparedStatement
(query, connection);

int fileLenght = (int) clientContentFile.length();
InputStream is = new FileInputStream(clientContentFile);
preparedStatement.setBinaryStream(1, is, fileLenght);
preparedStatement.setLong( 2,
serverFile.getId().longValue() );
int result = preparedStatement.executeUpdate();
is.close();
}
catch (SQLException e)
{ throw new MainException(e.getMessage(), e); }

catch (FileNotFoundException e)
{ throw new MainException(e.getMessage(), e); }

catch (IOException e)
{ throw new MainException(e.getMessage(), e); }

finally
{
disconnect(null, preparedStatement, null);
}
}


//////////////////////////////////////////////////////////////////////////
to get file
/////////////////////////////////////////////////////////////////////////


public static void getFile(Connection connection) throws
SQLException
{
String query = "select \n" +
" panta_file_substance.content \n" +
"from \n" +
" panta_file_substance\n" +
"where \n" +
" file_id=?";
PreparedStatement preparedStatement = connection.
prepareStatement(ServerSQLProjectDAO.getFileContent());
preparedStatement.setLong(1, 7801295236381635588l);
ResultSet resultSet = preparedStatement.executeQuery();
Blob content = null;
if (resultSet.next())
{
content = (Blob) resultSet.getBlob("CONTENT");
}
java.io.File contentffFile = new java.io.File("C:\\Temp\\new");
try
{
OutputStream os = new FileOutputStream(contentffFile);
int bufferSize = 2048;
byte[] array = new byte[bufferSize];
BufferedOutputStream bos = new BufferedOutputStream(os,
bufferSize);

InputStream is = content.getBinaryStream();
BufferedInputStream bis = new BufferedInputStream(is);

int nBytes;

while ((nBytes = bis.read(array)) != -1)
bos.write(array, 0, nBytes);

bos.close();
bis.close();
}
catch (IOException e)
{
e.printStackTrace();
}

}

 
steve





PostPosted: 2006-8-1 17:40:00 Top

java-programmer >> problems with getting blob from database On Tue, 1 Aug 2006 03:54:20 +0800, Pounce wrote
(in article <email***@***.com>):

> I`m writing from file to blob. Than I need to get blob content again
> and write it to file. When I open this file, I see the wrong symbols.
> Can anybody help me?
> Here is my code:
>
> ////////////////////////////
> to update file content
> ///////////////////////////
>
> private void updateFileContent(File serverFile, java.io.File
> clientContentFile) throws MainException
> {
> PreparedStatement preparedStatement = null;
> try
> {
>
> connection = connect();
> String query = "update panta_file_substance\n" +
> "set content = ?\n" +
> "where\n" +
> " file_id = ?"
> preparedStatement = getPreparedStatement
> (query, connection);
>
> int fileLenght = (int) clientContentFile.length();
> InputStream is = new FileInputStream(clientContentFile);
> preparedStatement.setBinaryStream(1, is, fileLenght);
> preparedStatement.setLong( 2,
> serverFile.getId().longValue() );
> int result = preparedStatement.executeUpdate();
> is.close();
> }
> catch (SQLException e)
> { throw new MainException(e.getMessage(), e); }
>
> catch (FileNotFoundException e)
> { throw new MainException(e.getMessage(), e); }
>
> catch (IOException e)
> { throw new MainException(e.getMessage(), e); }
>
> finally
> {
> disconnect(null, preparedStatement, null);
> }
> }
>
>
> //////////////////////////////////////////////////////////////////////////
> to get file
> /////////////////////////////////////////////////////////////////////////
>
>
> public static void getFile(Connection connection) throws
> SQLException
> {
> String query = "select \n" +
> " panta_file_substance.content \n" +
> "from \n" +
> " panta_file_substance\n" +
> "where \n" +
> " file_id=?";
> PreparedStatement preparedStatement = connection.
> prepareStatement(ServerSQLProjectDAO.getFileContent());
> preparedStatement.setLong(1, 7801295236381635588l);
> ResultSet resultSet = preparedStatement.executeQuery();
> Blob content = null;
> if (resultSet.next())
> {
> content = (Blob) resultSet.getBlob("CONTENT");
> }
> java.io.File contentffFile = new java.io.File("C:\\Temp\\new");
> try
> {
> OutputStream os = new FileOutputStream(contentffFile);
> int bufferSize = 2048;
> byte[] array = new byte[bufferSize];
> BufferedOutputStream bos = new BufferedOutputStream(os,
> bufferSize);
>
> InputStream is = content.getBinaryStream();
> BufferedInputStream bis = new BufferedInputStream(is);
>
> int nBytes;
>
> while ((nBytes = bis.read(array)) != -1)
> bos.write(array, 0, nBytes);
>
> bos.close();
> bis.close();
> }
> catch (IOException e)
> {
> e.printStackTrace();
> }
>
> }
>

it depends on the database, if it is oracle it could well be because you
have not prepared the blob first, which makes the process a 2 stage operation
UNLESS, you specifically set the database to default to initializing the blob
first.

steve