Страница 1 из 1

Как сохранить объект java в Firebird

Добавлено: 17 дек 2004, 10:41
mozheyko_d
Нужно сохранить некий объект java в базе данных.
Для этого используется:
FirebirdSS-1.5.1 - сервер под Linux
FirebirdSQL-1.5.5JDK1.4 - JDBC драйвер

Таблица:

create table a(
id integer not null primary key,
rawdata blob
)

Код: Выделить всё

    ...
    Object o = new SomeObject();
    statement.setObject(5, o);
    ...
И здесь выплёвывается вот такое исключение:

Код: Выделить всё

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to object.
	at org.firebirdsql.jdbc.field.FBField.setObject(FBField.java:741)
	at org.firebirdsql.jdbc.AbstractPreparedStatement.setObject(AbstractPreparedStatement.java:218)
	at Test.main(Test.java:37)
Чё делать?

Re: Как сохранить объект java в Firebird

Добавлено: 22 дек 2004, 17:20
Yura
Прежде всего объект, который будет сохранятся в БД должен быть сериализируемый. Тогда идея такова, седлать сериализацию в массив байтов и записать этот масив в базу данных. Обратно вытягивать в масив байтов, делать десериализацию.

SomeObject o = new SomeObject();

ByteArrayOutputStream bout = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(o);

pst.setBytes(1,bout.toByteArray());
pst.execute();

Re: Как сохранить объект java в Firebird

Добавлено: 23 дек 2004, 12:05
eugeney
mozheyko_d писал(а):Нужно сохранить некий объект java в базе данных.
Для этого используется:
FirebirdSS-1.5.1 - сервер под Linux
FirebirdSQL-1.5.5JDK1.4 - JDBC драйвер

Таблица:

create table a(
id integer not null primary key,
rawdata blob
)

Код: Выделить всё

    ...
    Object o = new SomeObject();
    statement.setObject(5, o);
    ...
И здесь выплёвывается вот такое исключение:

Код: Выделить всё

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to object.
	at org.firebirdsql.jdbc.field.FBField.setObject(FBField.java:741)
	at org.firebirdsql.jdbc.AbstractPreparedStatement.setObject(AbstractPreparedStatement.java:218)
	at Test.main(Test.java:37)
Чё делать?
FirebirdSQL-1.5.5JDK1.4 - JDBC драйвер называеться JayBird.
setObject используеться для того чтобы не писать
if( o instanceof String)
setString..
else if( o instanceof Integer)
setInt(...
Чтобы автоматически сохранялся Serialyzed объект про это никто не писал. Если сильно нужно напиши Рокитскому Роману возможно он добавит это. Но правильнее нужно использовать InputStream и setBlob.

Но совсем правильно не хранить объекты в BLOB, а использовать mapping объектов почитай про hibernate jdo EJB/CMP

Путилин Евгений.