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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
mozheyko_d

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

Сообщение mozheyko_d » 17 дек 2004, 10:41

Нужно сохранить некий объект 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)
Чё делать?

Yura
Сообщения: 1
Зарегистрирован: 22 дек 2004, 16:05

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

Сообщение Yura » 22 дек 2004, 17:20

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

SomeObject o = new SomeObject();

ByteArrayOutputStream bout = new ByteArrayOutputStream();

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

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

eugeney
Сообщения: 79
Зарегистрирован: 29 окт 2004, 18:51

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

Сообщение eugeney » 23 дек 2004, 12:05

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

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

Ответить