powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить структуру БД (Cache+Java)
8 сообщений из 8, страница 1 из 1
Как получить структуру БД (Cache+Java)
    #34969943
Igor3T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно получить структуру базы из явы? Или хотябы список классов.

Для чего это нужно: хочу написать универсальный поиск для базы Cache, т.е., грубо говоря, мое окошко поиска само формирует интерфейс для поиска, и осуществляет поиск по введенным параметрам. Это работает. Но хотелось бы чтобы оно еще и посмотрело какие классы есть в базе и добавило их в список для выбора.
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34970103
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите доку к классу %Dictionary.CompiledClass в этом %Persistent классе содержится описание всех классов, select * from %Dictionary.CompiledClass выдаст вам все (включая системные классы), надо будет ограничить c помощью Where Super %Like '%Persistent%' и "внаглую". Однако тут могут быть упущены классы которые наследованы от других хранимых классов, в этом случае у них в Super будет стоять имя вашего класса родителя. В общем универсальный запрос для хранимых классов, лично я, составить не могу. Однако копать, я думаю, надо в %Dictionary.CompiledClass (там же кстати есть ссылка на %Dictionary.CompiledProperty).
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34970481
Грин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если воспользоваться запросом %Dictionary.ClassDefinition:Summary ? Он вроде все классы возвращает.
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34971399
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГринА если воспользоваться запросом %Dictionary.ClassDefinition:Summary ? Он вроде все классы возвращает.
ClassDefinition возвращает описания классов, так как они записаны в cls, а CompiledClass -- информация о уже скомпилированных классах.
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
USER>s p=##class(%Dictionary.ClassDefinition).%OpenId("User.EMP")
 
USER>w p.SqlTableName
 
USER>s q=##class(%Dictionary.CompiledClass).%OpenId("User.EMP")
 
USER>w q.SqlTableName
EMP
В описании для класса User.EMP не указано свойство SqlTableName, но при компиляции оно определяется.
То же самое, если класс есть, но компилируется с ошибками(т.е. не компилируется), то в ClassDefinition он будет, а в CompiledClass --- нет
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34972789
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor3TКак можно получить структуру базы из явы? Или хотябы список классов.
Ответ существенно зависит от способа коннекта и от предоставляемых им возможностей.
Если у вас есть проекции классов, то нарисуйте себе классов с функциями и в этих функциях на серверной стороне делайте что хотите. Если коннект через JDBC то насколько я правильно ошибаюсь, он похож на ODBC и представляет интерфейс к SQL. Тогда нарисуйте себе каких хотите запросов, например:
http://karataev.nm.ru/cache/dodbc.html
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34973521
Грин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр КобловClassDefinition возвращает описания классов, так как они записаны в cls, а CompiledClass -- информация о уже скомпилированных классах.
Получается, что оба варианта отвечают на вопрос, при условии (!), что все классы успешно скомпилированы. Как следствие оба варианта предоставят все имена свойств и методов. Думаю, что для поставленной задачи значения свойств не нужны...
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #34976556
Igor3T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
u78посмотрите доку к классу %Dictionary.CompiledClass в этом %Persistent классе содержится описание всех классов, select * from %Dictionary.CompiledClass выдаст вам все (включая системные классы), надо будет ограничить c помощью Where Super %Like '%Persistent%' и "внаглую". Однако тут могут быть упущены классы которые наследованы от других хранимых классов, в этом случае у них в Super будет стоять имя вашего класса родителя. В общем универсальный запрос для хранимых классов, лично я, составить не могу. Однако копать, я думаю, надо в %Dictionary.CompiledClass (там же кстати есть ссылка на %Dictionary.CompiledProperty).

Спасибо! Я поэкспериментировал немного, вот так лучше всего:
Код: plaintext
select * from %Dictionary.CompiledClass Where System =  0 


Запрос возвращает только те классы, что я создал, независимо от чего они унаследованы.

Не знаю, правильно ли так делать, но это работает.
...
Рейтинг: 0 / 0
Как получить структуру БД (Cache+Java)
    #35006154
dolphin278
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо, не совсем верно, т.к. будет возвращать и классы, не объявленные как хранимые. Лучше добавить ограничения, что ClassType = 'persistent', и Abstract = 0.

InterSystems CIS, консультант
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как получить структуру БД (Cache+Java)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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