Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с таблицей произвольной структуры / 23 сообщений из 23, страница 1 из 1
05.07.2015, 18:52
    #38999989
alister
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Нужно строить гриды на таблицах, чья структура хранится в виде метаданных и наперед неизвестна.
Сейчас обращение к таблицам построено через классы Entity в persistence, а источник данных описан не jBossе.
Как альтернатива описаны hibernate dynamic model, но пока непонятно как генерировать такой map в runtime
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/persistent-classes.html#persistent-classes-dynamicmodels
Persistent entities do not necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using Maps of Maps at runtime) and the representation of entities as DOM4J trees. With this approach, you do not write persistent classes, only mapping files.
...
Рейтинг: 0 / 0
06.07.2015, 09:11
    #39000178
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alisterНужно строить гриды на таблицах, чья структура хранится в виде метаданных и наперед неизвестна.
в общем случае, такая постановка - глупость.
...
Рейтинг: 0 / 0
06.07.2015, 09:43
    #39000213
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alister,

А вопрос-то какой? Соглашусь с Petro123. С такой задачей хорошо бы подумать а есть ли польза от ORM вообще?
...
Рейтинг: 0 / 0
06.07.2015, 12:05
    #39000380
alister
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Blazkowiczalister,

А вопрос-то какой? Соглашусь с Petro123. С такой задачей хорошо бы подумать а есть ли польза от ORM вообще?
Спасибо за конструктивизм :)
Petro123 вообще постановка задачи не нравится , с ORM или без, просто не нравится и все, причем настолько, что он, только чтобы выразить сей важный и многозначительный факт, что ему это не нравится, даже зашел на форум и откомментил мой пост :)
Насчет есть ли польза в этой задаче от ORM, тоже склоняюсь к тому же.
Смущают только эти динамические модели, может быть с их помощью задача бы имела решение.
...
Рейтинг: 0 / 0
06.07.2015, 12:15
    #39000394
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alisterСмущают только эти динамические модели, может быть с их помощью задача бы имела решение.
могу сказать ещё короче - БРЕД))).
Если бы ты был первый, с такой постановкой). Но увы.
..
ОРМ\динамические модели\ИИ (искусственный интеллект) - это средства.
О задачах и целях ИС ты пока не говорил.
Похоже это нужно только тебе - программисту.
Удачи!
...
Рейтинг: 0 / 0
06.07.2015, 12:35
    #39000416
alister
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Petro123alisterСмущают только эти динамические модели, может быть с их помощью задача бы имела решение.
ОРМ\динамические модели\ИИ (искусственный интеллект) - это средства.
О задачах и целях ИС ты пока не говорил.
Может это немножко неожиданно на этом форуме, но меня интересуют именно средства.
Задачи и цели я также мог бы обсудить, если кому нибудь это вдруг оказалось интересно.
...
Рейтинг: 0 / 0
06.07.2015, 12:42
    #39000432
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alister,
у 1-ой Цели-задачи есть 100 путей решения.
Если ты строишь админку к национальной СУБД по импортузамещения))
https://slon.ru/posts/53511
- это одно.
Если ETL, это другое (есть готовое).
Ты же не из программистов вроде. А из DBA.
...
Рейтинг: 0 / 0
06.07.2015, 12:45
    #39000440
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alister,
т.к. метаданные о таблах в сиквеле и оракле всё равно статичны и точно описаны, то делается 2 уровня Модели. Нижняя (ядро-ERP) и верхняя.
Это дорого и долго.
IMHO
Удачи!
...
Рейтинг: 0 / 0
06.07.2015, 12:49
    #39000447
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alisterМожет это немножко неожиданно на этом форуме, но меня интересуют именно средства.
Задачи и цели я также мог бы обсудить, если кому нибудь это вдруг оказалось интересно.
Средства для работы с таблицами неопределенного формата, логики неопределенного назначение, решающих задачу неопределенной постановки.

Средств мета-программирования масса. Но только постановки задачи всё ещё не видно. Зачем нужна выборка из таблицы неопределенного формата? Ведь в ней данные неопределенного происхождения и неопределенного предназначения?

Здесь обсуждение
http://rsdn.ru/forum/philosophy/5659632.flat
Здесь ссылка на одно из относительно не старых средств такой разработки
http://rsdn.ru/forum/java/5385555.flat
...
Рейтинг: 0 / 0
06.07.2015, 13:02
    #39000465
alister
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Blazkowicz, спасибо, ознакомлюсь.
...
Рейтинг: 0 / 0
06.07.2015, 13:50
    #39000523
dimonz80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alister,

Если так хочется "через классы Entity в persistence", то рефлексией, наверное. А вообще лучше на лысом JDBC, ну там PreparedStatement.getMetaData()...
Вот говнокод на Скалке, накиданый для говнопроекта на скорую руку. Перевести на жабу, думаю, смогёте.

Код: java
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.
59.
60.
61.
62.
63.
64.
65.
import anorm._
import anorm.SqlParser._
import play.api.db._
import scala.util._
import play.api.Play.current
import utils.Utils._

case class ViewEntry(id: Long, data: List[String])
case class ViewColumn(id: Int, name: String, _type: String)

/**
 * Спец класс для списочных представлений с фильтрами и пажинацией
 * В качестве аргумента принимает SQL запрос, первой колонкой должен быть id сущности
 */
 case class View(query: String) {

  def queryColumns = DB.withConnection { implicit connection =>
    val stmt = connection.prepareStatement(query)
    val md = stmt.getMetaData
    for (i <- 2 to md.getColumnCount) yield {
      ViewColumn(i, md.getColumnName(i), md.getColumnClassName(i))
    }
  }

  // надо переписать нормально, а то очкую из-за инъекций. Однко внедрить вредный SQL не получилось... 
  def wrappedQuery(limit: Int, offset: Int, order: Int, filter: String) = {
    var orderDirection = if(order < 0) "desc" else "asc"
    val orderExpr = if (order != 0) {
      s" order by  ${math.abs(order)} ${orderDirection} nulls last"
    } else {
      ""
    }

     s"""
    	select * from (${query}) as subquery  where (
    		-- Пользовательские условия --------------------
    		${if (filter.trim.isEmpty) "true" else filter}
    		------------------------------------------------
    	) 
    	${orderExpr} limit ${limit} offset ${offset}""" 

  }

  def entries(limit: Int = 10, offset: Int = 0, order: Int = 1, filter: String = "") = DB.withConnection { implicit connection => 
    val rs = connection.prepareStatement(wrappedQuery(limit, offset, order, filter)).executeQuery()
    val md = rs.getMetaData
    val columns = md.getColumnCount()
    val data = scala.collection.mutable.ArrayBuffer[ViewEntry]()

    while (rs.next) {
      val rowData = scala.collection.mutable.ArrayBuffer[String]()
      val id = try {rs.getLong("id")} catch {case e : Exception => -1}

      for (i <- (if(id == -1) 1 else 2) to columns) {
        md.getColumnClassName(i) match {
          case "java.sql.Date" => rowData.append(formatDate(rs.getDate(i),"dd.MM.yyyy"))
          case _ => rowData.append(rs.getString(i))
        }
      }
      data.append(ViewEntry(id, rowData.toList))
    }
    data.toList
  }

} 
...
Рейтинг: 0 / 0
06.07.2015, 14:07
    #39000541
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
dimonz80,
уже готовых классов XXXXRowSet \ XXXXDataSet уже и так полно.
Которые на
Код: java
1.
'select * from ' + 'table_name'

возьмут данные.
Главное, что потом с этим Г... делать))
...
Рейтинг: 0 / 0
06.07.2015, 14:44
    #39000575
dimonz80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Petro123Главное, что потом с этим Г... делать))

Ой да мало-ли?)))) Ну хочется если сильно, кто ж запретит? Те же ad-hoc отчетики там, или супермегауниверсальныйкоторыйрешитвсенашипроблемы компонент, ему на входе SQL запрос чик, а он все за тебя рисует сам такой оп-па!
...
Рейтинг: 0 / 0
06.07.2015, 15:21
    #39000625
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
dimonz80супермегауниверсальныйкоторыйрешитвсенашипроблемы компонент
он уже есть - XXXXRowSet
И даже ЯП без ограничений и типизации тоже.
"Не пей Иванушка из колодца..."
...
Рейтинг: 0 / 0
06.07.2015, 16:05
    #39000692
dimonz80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Petro123
И даже ЯП без ограничений и типизации тоже.


А! Теперь понял вашу позицию.
...
Рейтинг: 0 / 0
06.07.2015, 17:56
    #39000816
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
alisterНужно строить гриды на таблицах, чья структура хранится в виде метаданных и наперед неизвестна.
.

Ну вот моя CIS почти по этому принципу построена.
Есть xml в котором описывается grid (поля цвет размер,Edit control).
В этом же xml описывается поля для диалоговых форм для CRUD/
(label,text,combo расположение их на форме и т.д)
В базе описан sql
В базе описан CRUD pl/sql
ADF читает sql и уже знает все метаданные по нему.
Я их использую для прорисовки грида и изменения записей.
(так же грузится класс в котором есть некая интерфейсная логика(ведь не всё состоит из CRUD))


К сожалению это только desktop. на webе ....у меня не получилось такое реализовать.
Слишком консервативным он(web) оказался.(может со временем ...наберусь опыта :-) )
...
Рейтинг: 0 / 0
07.07.2015, 06:27
    #39001015
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
irbis_alК сожалению это только desktop. на webе ....у меня не получилось такое реализовать.
Слишком консервативным он(web) оказался.(может со временем ...наберусь опыта :-) )
На web это делается еще проще.
За счет "гибкости" JavaScript можно сделать все что угодно.
...
Рейтинг: 0 / 0
07.07.2015, 19:12
    #39001738
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
mad_nazgul,

Ой а как просто это делается на десктопе знает любой, кто хоть раз запуска Excel.

И тебе таблички любой ширины, и фильтры хоть по цвету полей.
И аналитика ...

Но, почему-то бытует у профессионалов мнение, что Excel в такой постановке это глупость. :)


P.S. Недавно было одно т.з. - так и сказали сделать табличку с функционалом не меньшим, чем в Excel.
...
Рейтинг: 0 / 0
08.07.2015, 06:15
    #39001919
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Сергей Арсеньевmad_nazgul,
P.S. Недавно было одно т.з. - так и сказали сделать табличку с функционалом не меньшим, чем в Excel.

Помню... Делали...
Внедряли ERP/CRM/BPM (и прочие страшные абревиатуры)
Так для модуля бюджетирования пришлось делать свой как бы Excel.
Даже формулы можно было писать с условным оператором.

Почему нельзя было просто оставить выгрузку в Excel нам наши аналитики внятного ответа не дали.
Точнее ответ был "потому что бабки"!
...
Рейтинг: 0 / 0
08.07.2015, 07:36
    #39001936
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
mad_nazgul,

Против выгрузки в Excel обычно не возражают.
Хуже с загрузкой. Уж и ячейки защитишь и то и се. Фиг тебе. половина строк и столбцов удалена, какие-то перенесены, а в столбце количество сакральное "полтора-два".
И считай потом аналитику.
...
Рейтинг: 0 / 0
08.07.2015, 09:35
    #39002010
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
mad_nazgulПочему нельзя было просто оставить выгрузку в Excel нам наши аналитики внятного ответа не дали.
Точнее ответ был "потому что бабки"!
в этом вся соль таких задач от дилетантов
...
Рейтинг: 0 / 0
08.07.2015, 11:01
    #39002114
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
Сергей Арсеньевmad_nazgul,

Против выгрузки в Excel обычно не возражают.
Хуже с загрузкой. Уж и ячейки защитишь и то и се. Фиг тебе. половина строк и столбцов удалена, какие-то перенесены, а в столбце количество сакральное "полтора-два".
И считай потом аналитику.

Да не выгрузку в Excel как раз не надо было (с готовыми формулами)
"Хотелка" наших "топ-топ"-менеджеров была, чтобы только в "системе".
...
Рейтинг: 0 / 0
08.07.2015, 16:48
    #39002622
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицей произвольной структуры
mad_nazgul"Хотелка" наших "топ-топ"-менеджеров была, чтобы только в "системе".очень хорошая хотелка.


многим пользователям эксель в руки давать нельзя
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с таблицей произвольной структуры / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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