IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
mozheyko_d
Сообщение
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
Сообщение
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
Сообщение
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
Путилин Евгений.