Skip to Main Content

Java Database Connectivity (JDBC)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

How to store images in database ?

843859Aug 31 2008 — edited Sep 1 2008
hi to all

In a standalone application, I need to store images (took by a camera) in a database.
Also I need (od course) to recover those images and to display them again.

I have not experience with this kind of problem so I looked for help in the forum,
and now I think I know that there are two possibilities to do it:
- to store the image inside a Blob column of the database;
- to store the image inside a BinaryStream column.
In the first case the data to store in the Blob column needs to be (transformed in) a java-byte[] type.
In the second case the data to store in the Blob column have to be (transformed in) a java-file type.
As well the documentation says that Blob is a better solution, someone in the forum said that, with
large images, he got better and more sure performances using BinaryStream type.

Before I begin to write the code I would like to know if what I learned is right,
and I would like to hear other opinions about this question.

thank you

regards

tonyMrsangelo

Comments

843859
Blob is the datatype you use as database column type to store binary data. You use PreparedStatement#setBinaryStream() to set it in a SQL query and you use ResultSet#getBinaryStream() to obtain it from the SQL result.
796254
i'd recommend storing the path to a file in the database and putting the images themselves on the file system.

%
843859
thank you for your kind answer.
So I did a mistake: 'do not exists a BinaryStream column type!!!!
....and the statement: setBlob(), setBinaryStream() both work with the only Blob colum type...
If I good unsertood, you recomended me to use the setBinaryStream() statement with a blob column, saving
before the file on the file system, and not to store it directly in the database...
Of course, in this case the program have also the duty of saving and the deleting the files on the hard disk.

Could you you show me a sinthetic code example about the sintax to use to indicate the saved file inside the setBinaryStream() statement ?


------
About the other solution: (to use resultSet.setBlob() statement).
(I saw it is used too, I think with java - byte[] type to store directly binary informations in the database).
I could do it trasforming the image in array of byte and store it directly in the database.
It should be possible to do it ?

Perhaps yes, but you didn't suggest me to do it..

-------
Excuse me if I asked you again ...but I would have a complete understanding of the problem....

thank you very much
regards
tonyMrsangelo
843859
Duffymo rather meant that the preferred approach is to write the file to the server's disk system using java.io API and to store its path in the database as a simple varchar field (use setString() and getString() to do that).
843859
thank you to answering me,

as I said, I don't have any experience working with Blob;
I got some information about this on the forum but no example is right for my purpose.
 
"I am working with a standalone application where a dentist, using a camera, can save images and see them again later or delete them too." 
I need to store Blob in the same way that is used to do with string, integer
or float type..., but as I understand to store Blobs it is not the same as store
on a database primitive type of data.
 
I should like have some general information how to do it before to write a 
complex as well as wrong code.. 
To work in this way gives very much disappointment ... :-).

thank you very much
regards

tonyMrsangelo
843859
As said before, use PreparedStatement#setBinaryStream().

If your problem is rather that you don't understand how to use PreparedStatement, then start reading its section in the JDBC tutorial here at Sun.com.
843859
thank you for answering me ,

I am able to use PreparedStatement(), but I should like to know what parameter put inside
the function :
preparedStatement.setBinaryStream(1 , xxx);

What is xxx in my case ??? ....

I understand that, perhaps, I ask a stupid thing ... but I am confuse...

I yet am thinking if I have to store the file on the hard disk passing a link
of the his path to the database..., or if I have to store really the stream inside the database.

in the docomentation I read:
By default drivers implement Blob using an SQL locator(BLOB), which means that a Blob object 
contains a logical pointer to the SQL BLOB data rather than the data itself.
Really I am not sure what this exactly can means and I see they are more than one way to store big objects..

I excuse if I am bothering you but I would not try wrong, ...doing it with database is complex for understand possible errors....

thank you
regards
843859
Just read the API docs whenever you want a clear explanation of the purpose of the class, what methods it all provides and how to use them all.

[http://java.sun.com/javase/6/docs/api/java/sql/PreparedStatement.html].
1 - 8
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Sep 29 2008
Added on Aug 31 2008
8 comments
295 views