Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Создать копию объекта?


Автор: marlborist 19.10.2007, 13:10
проблема в следующем. 
Есть некая функция 
public ResultSet fun(){
    ResultSet rs = statement.executeQuery(sql);
    ResultSet rs2 = rs;
    rs.close();
    return rs2;
}
После вызова данной функции java выдаст ошибку мол ресалт сет зокрыт, потому что объек rs2  ссылается на объект созданный rs (так называемая дублирующая сылка )
Как мне создать копию объекта rs и передать ее в rs2? Метод clone() не доступен.

Автор: AntonSaburov 19.10.2007, 13:30
Ну вообщем-то обычно данные из ResultSet для каждой строки оформляются как объект какого-то типа и все они помещаются в коллекцию - ArrayList, Vector и т.д.

Например если в строке из базы два поля, то создается класс из двух полей и на кажду строку резалтсета надо сделать
Код

List result = new ArrayList();

while(rs.next()) {
    MyClass m = new MyClass();
    m.setField1(rs.getString("Field1");
    m.setField1(rs.getString("Field1");
    result.add(m);
}


Это конечно же не реальный код, а эскиз к коду, идея.

Можно посмотреть в сторону Hibernate

Автор: marlborist 19.10.2007, 13:41
Ну вобщем -то да это выход. Если ни кто мне больше ни чего не посоветует, я так и сделаю

Автор: VSergeyV 19.10.2007, 13:42
Цитата(AntonSaburov @  19.10.2007,  13:30 Найти цитируемый пост)
Можно посмотреть в сторону Hibernate 

или что полегче, например Apache DdlUtils http://db.apache.org/ddlutils

Автор: marlborist 19.10.2007, 13:53
Цитата

Цитата

Можно посмотреть в сторону Hibernate 

или что полегче, например Apache DdlUtils http://db.apache.org/ddlutils

Нет не конает. 
Я уже написал большую часть проекта используя хранимые процедуры, так что менять что - то позно

Автор: jer1 19.10.2007, 22:01
ResultSet не хранит в себе данные, он лишь обеспечивает их чтение унифицированным способом (вот об этом и COVD говорит из соседней ветки http://forum.vingrad.ru/index.php?showtopic=177845&view=findpost&p=1292377). 
Параллельный код для наглядности :
Код

    FileInputStream fun2() throws IOException {
         FileInputStream fis = ...; // открываем ресурс
         FileInputStream fis2 = fis; // создаем алиас (еще одна ссылка на ресурс)
         fis.close();  // закрываем ресурс (освобождаем занятые системные ресурсы)  - ресурс больше недоступен 
         return fis2;   // бесполезно - работать не будет
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)