powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ликбез по интерфейсам
25 сообщений из 26, страница 1 из 2
Ликбез по интерфейсам
    #33023763
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил что называется зияющую дыру в своих познаниях, поэтому прошу не смеяться слишком громко.

Вопрос такой - решил добавить к ResultSet маленький методик и столкнулся с тем что это не класс , а интерфейс и соответственно мне нужно прописать все его методы. Но это ладно - там по-моему какоето слово ключевое, волшебное есть. Больше меня поразило следующее - если ResultSet - интерыейс то какой класс реализует все его методы?
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023765
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХА-ХА-ХА

PS извини. рассмеялось что-то :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023771
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugБольше меня поразило следующее - если ResultSet - интерыейс то какой класс реализует все его методы?

тот, который поставляется с jdbc-драйвером. jdbc-драйвер - это реализация
всех интерфейсов java.sql.*

Connection, Statement - тоже кстати интерфейсы
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023793
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugОбнаружил что называется зияющую дыру в своих познаниях, поэтому прошу не смеяться слишком громко.

Вопрос такой - решил добавить к ResultSet маленький методик и столкнулся с тем что это не класс , а интерфейс и соответственно мне нужно прописать все его методы. Но это ладно - там по-моему какоето слово ключевое, волшебное есть. Больше меня поразило следующее - если ResultSet - интерыейс то какой класс реализует все его методы?

вызови getClass() у объекта реализующего ResultSet и узнаешь класс, который это делает :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023858
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs NaugОбнаружил что называется зияющую дыру в своих познаниях, поэтому прошу не смеяться слишком громко.

Вопрос такой - решил добавить к ResultSet маленький методик и столкнулся с тем что это не класс , а интерфейс и соответственно мне нужно прописать все его методы. Но это ладно - там по-моему какоето слово ключевое, волшебное есть. Больше меня поразило следующее - если ResultSet - интерыейс то какой класс реализует все его методы?

вызови getClass() у объекта реализующего ResultSet и узнаешь класс, который это делает :)объект, кстати не реализует интерфейс :)

по сабжу:

Код: plaintext
1.
2.
ResultSet rs = con.createStatement().executeQuery(...);
System.out.ptintln(rs.getClass().getName());
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023884
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что же он тогда делает с этим интерфейсом ? :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023900
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное Граспых подразумевал, что интерфейс реализует класс, а не объект :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023906
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получил: sun.jdbc.odbc.JdbcOdbcResultSet

То есть если я хочу добавить метод к ResultSet-у мне надо екстендить именно этот класс? А потом база смениться и появится другая реализация? Что-то подозрительно. Как сделать правильно?
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023916
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНаверное Граспых подразумевал, что интерфейс реализует класс, а не объект :)

Я тоже это подразумевал :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023918
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugПолучил: sun.jdbc.odbc.JdbcOdbcResultSet

То есть если я хочу добавить метод к ResultSet-у мне надо екстендить именно этот класс?да
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023921
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugПолучил: sun.jdbc.odbc.JdbcOdbcResultSet

То есть если я хочу добавить метод к ResultSet-у мне надо екстендить именно этот класс? А потом база смениться и появится другая реализация? Что-то подозрительно. Как сделать правильно?
Ага, при смене JDBC драйвера, твой код работать не будет.
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023946
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хватит измываться - ведь как-то это можно сделать правильно. Мне всего-то что надо это методик который в зависимости от посылаемого параметра менял get-методы (то есть послал стринг - вернул getString, послал "data" верул getdate с определённым форматом)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33023947
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugПолучил: sun.jdbc.odbc.JdbcOdbcResultSet

То есть если я хочу добавить метод к ResultSet-у мне надо екстендить именно этот класс? А потом база смениться и появится другая реализация? Что-то подозрительно. Как сделать правильно?

Не надо ничего наследовать, надо делать класс враппер.

Типа такого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
сlass MyResultSet  implements  ResultSet {
        private  ResultSet rs;
        public  MyResultSet(ResultSet rs){
             this .rs = rs;
       }
        
        ...
        далее реализуем все методы интерфейса ResultSet,
        переадресуя эти вызовы rs
        ...

        добавляем свои методы.
         public  String getPutinName(){
              return  "Vova";
        }
}


Если нужно обратиться к новому методу, то в коде можно будет сделать вызов new MyXXX(rs).getPutinName();
Тот же MyXXX можно сувать везде где пролазит ResultSet :)

"Глобально" изменить интерфейс ResultSet ты не сможешь никогда. (Если не захочешь переписать все его реализации :)) )
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024094
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я конечно ни на что не претендую но

автордалее реализуем все методы интерфейса ResultSet, переадресуя эти вызовы rs

это тоже не намного лучше чем в дрова свои куски вставлять

можно так схитрить

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
 public   class  MyResultSet{

  //Стандартный ResultSet
   private  java.sql.ResultSet STD_RESULT_SET;

  //----------------------------------------------------------------------------
  /**
   * Конструктор получает на вход стандартный ResultSet.
   * @param _rs стандартный ResultSet
   */
   public  MyResultSet(java.sql.ResultSet _rs){
      STD_RESULT_SET = _rs;
      LF =  new  LogFile();
  }

  //----------------------------------------------------------------------------
  /**
  * Получить стандартный ResultSet.
  *
  */
   public  ResultSet srs(){
     return  STD_RESULT_SET;
  }

//--- Реализация тех методов которые тебе нужны -----------------------------
  /**
  * Получить двумерный массив по имени колонки.
  *
  * @param _name имя колонки
  * @return возвращает Object[][]
  */
   public  Object[][] get2DArray(String _name)  throws  SQLException{
     return  get2DArr(STD_RESULT_SET.getString(_name));
  }

  //----------------------------------------------------------------------------
  /**
  * Получить двумерный массив по номеру колонки.
  *
  * @param _col номер колонки
  * @return возвращает Object[][]
  */
   public  Object[][] get2DArray( int  _col)  throws  SQLException{
     return  get2DArr(STD_RESULT_SET.getString(_col));
  }

  //----------------------------------------------------------------------------
  /**
  * Получить двумерный массив из PostgreSQL.
  *
  * @param _str массив как строка {{p1,p2,p3},{p5,p6,p7}}
  *
  * @return возвращает Object[][] (строки) другие типы пока не реализованны
  */
   private  Object[][] get2DArr(String _str){
   ... реализация метода ...
  }
}

вот а работает это так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 try {
        String q = "SELECT t.nav_request FROM up_sys.queue_rr AS t WHERE t.id = 2318";

        PreparedStatement st = con.prepareStatement(q);
        MyResultSet rs =  new  MyResultSet(st.executeQuery());

         while (rs.srs().next()){
          Object[][] test = rs.get2DArray("nav_request");
        }

      } catch (SQLException e){

      }

при добавлении новых методов в интерфейс (хотя насколько я знаю это не принято) никаких проблем возникнуть не должно, а то придется класс (врапер) править для добавления новых методов

PS
я кстати такойже вопрос задавал мне и этого не насоветовали сказали что я типа еще молод ;-) пришлось самому придумывать
------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024403
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrэто тоже не намного лучше чем в дрова свои куски вставлять

Неправда. Способ, предложенный NotGonnaGetUs - стандартное решение в подобных ситуациях, причем правильное, на мой взгляд :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024570
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrя конечно ни на что не претендую но

автордалее реализуем все методы интерфейса ResultSet, переадресуя эти вызовы rs

это тоже не намного лучше чем в дрова свои куски вставлять

можно так схитрить
....
------------------------
жизнь как пестня

Говорить о том, что одно решение лучше другого не стоит, у каждого есть свои плюсы и минусы.
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024578
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
те если изменился драйвер и в RS появились новые методы мне нужно залезть дописать класс и забилдить его еще раз и доставить например всем клиентам которые были сделаны?
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024592
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я не сказал что мое решение лучше я просто предложил его :-))
идет здоровый конструктивный диалог и не больше
(никого не обзывал дураками и не говорил что все тупые и ни каплю не засомневался ни в чьей компетенции)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024600
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrте если изменился драйвер и в RS появились новые методы мне нужно залезть дописать класс и забилдить его еще раз и доставить например всем клиентам которые были сделаны?
ты ваще читаешь че пишут??
че тут написано?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
сlass MyResultSet  implements  ResultSet {
        private  ResultSet rs;
        public  MyResultSet(ResultSet rs){
             this .rs = rs;
       }
        
        ... //тут вот
        далее реализуем все методы интерфейса ResultSet,
        переадресуя эти вызовы rs
        ...

        добавляем свои методы.
         public  String getPutinName(){
              return  "Vova";
        }
}
rs - интерфейс. мля. какие нахх новые методы. ьля!
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024603
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrте если изменился драйвер и в RS появились новые методы мне нужно залезть дописать класс и забилдить его еще раз и доставить например всем клиентам которые были сделаны?

Ты правда не знаешь ответ на этот вопрос? :)
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024636
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, а вот если в интерфейсе ResultSet произойдёт изменение при смене версий явы, добавят какой-нибудь метод, то получится что мой класс начнёт требовать реализовать недостающее либо объявить его абстрактным?
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024645
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugНе, а вот если в интерфейсе ResultSet произойдёт изменение при смене версий явы, добавят какой-нибудь метод, то получится что мой класс начнёт требовать реализовать недостающее либо объявить его абстрактным?
ну и что? как минимум клиенту ты должен будещь инсталлировать новый jre.
а если jre более старой версии - тогда и твой класс работает по-прежнему.
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024659
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я знаю что в екселе например когда с ним из какого нить С работаешь есть метод value и метод value_2 (интересно зачем он нужен???)

2NotGonnaGetUs
что то не приходит ничего в голову не трудно будет ответить (правда интересно)

2Timm
мужчина ЭТО форум тут (я смею надеятся) в спорах рождается истина и не надо показывать как богат наш язык
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024694
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrи не надо показывать как богат наш язык
почему? всегда интересно узнавать что-то новое. я, например, очень
люблю русский язык. мне всегда интересно просто читать что-то
на нем написанное.
...
Рейтинг: 0 / 0
Ликбез по интерфейсам
    #33024731
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrя знаю что в екселе например когда с ним из какого нить С работаешь есть метод value и метод value_2 (интересно зачем он нужен???)

2NotGonnaGetUs
что то не приходит ничего в голову не трудно будет ответить (правда интересно)

2Timm
мужчина ЭТО форум тут (я смею надеятся) в спорах рождается истина и не надо показывать как богат наш язык

Тема богатства языка понравилась. На что я должен ответить - не понял, поэтому отвечу на то, что хочется :)

Если речь идёт об изменении драйвера - то это ни на что не влияет, если ты, конечно, не используешь спецефичные именно для этого драйвера классы/методы.
Но в таком случае, при смене драйвера всё равно всё придётся менять.

Изменение java.sql.ResultSet - это из области научной фантастики. Если это произойдёт, ВСЕМ разработчикам драйверов придётся переписать свой код. И как следствие - всем, кто эти драйвера использует, если вообще возникнет желание переходить на новую версию java с новым резалСетом.

Единственное, что можно ожидать - появляение интерфейса расширяющего ResultSet. Но это ни как не повлияет на уже написанный код, если не возникнет необходимость использовать фичи нового интерфейса.
Если же такая необходимость возникнет, то код всё равно надо будет менять и доставлять клиенту, так что проблем ноль :)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Ликбез по интерфейсам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]