PDA

View Full Version : Storing Object into Database



hemanthjava
12-02-2006, 04:21 AM
I have a Person Object with attributes like name, age, sex etc which I wanna store in the sybase database. The column in which it is to be stored is of "text" datatype.

I have converted the object into a Byte Output Stream and stored the object as a Byte Array in to the database. I have done something like this..


ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(baos);
oout.writeObject(obj);
oout.close();
ps.setBytes(1, baos.toByteArray());




Now when I want to read the object from the database I did something like this..


byte[] buf = rs.getBytes(column);
if (buf != null) {
ObjectInputStream objectIn = new ObjectInputStream(
new ByteArrayInputStream(buf));
Object obj = objectIn.readObject(); //Contains the object
PersonDetails p = (PersonDetails)obj;
System.out.println(p.getName()+"\t"+p.getAge()+"\t"+p.getSex());
}




I used rs.getBytes and do the following as shown above. Gives me an sql exception. I used getClob also. Still it gives me some sql exception. What I want is the object back. How do I get it back.


Basically My sybase column datatype is "text". Is there a better way to serialize the object and store in the databse. If there is one please let me know. Note that I cant change the type of column type (text) to any other type...

Twey
12-02-2006, 02:12 PM
Note that I cant change the type of column type (text) to any other type...base64-encode it.
import java.util.prefs.Base64;
// ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(baos);
oout.writeObject(obj);
oout.close();
ps.setBytes(1, Base64.byteArrayToBase64(baos.toByteArray()));And:
byte[] buf = Base64.base64ToByteArray(new String(rs.getBytes(column)));

if (buf != null) {
ObjectInputStream objectIn = new ObjectInputStream(
new ByteArrayInputStream(buf));
Object obj = objectIn.readObject(); //Contains the object
PersonDetails p = (PersonDetails)obj;
System.out.println(p.getName()+"\t"+p.getAge()+"\t"+p.getSex());
}However, using a binary column is preferable: base64-encoding can be inefficient.

hemanthjava
12-03-2006, 04:36 AM
When I try to import java.util.prefs.Base64;

it says the type java.util.prefs.Base64 is not visible...

Base64 cannot be resolved and stuff.

Twey
12-03-2006, 07:19 PM
In what can only be described as a fit of pure brain damage, it seems Sun have decided to include this class in the distribution but not make it public. You can, however, simply copy and paste the class source into a class of your own.