Инициализация соединения

Обсуждение Stimulsoft Reports.Java
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Инициализация соединения

Сообщение alexeyfressko » 18 дек 2017, 20:28

Здравствуйте.

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

set time_zone='America/Bogota';

??
Vadim
Сообщения: 97
Зарегистрирован: 04 апр 2013, 08:26

Re: Инициализация соединения

Сообщение Vadim » 19 дек 2017, 08:08

Здравствуйте.
Движок не поддерживает данную функцию.
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Re: Инициализация соединения

Сообщение alexeyfressko » 19 дек 2017, 13:06

Есть ли в планах?
HighAley
Сообщения: 1955
Зарегистрирован: 08 июн 2011, 07:36

Re: Инициализация соединения

Сообщение HighAley » 21 дек 2017, 20:11

Здравствуйте.

Таких планов нету. Как вариант вы можете добавить эту строку в ваши запросы.

Спасибо.
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Re: Инициализация соединения

Сообщение alexeyfressko » 22 дек 2017, 15:42

Нашел другой путь.

В строке подключения к драйверу MySQL нужно указывать такую строку:

jdbc:mysql://127.0.0.1/mobilvendor2_main?user=root&password=pwd&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=true&serverTimezone=America/Bogota&sessionVariables=time_zone%3D%27America%2FBogota%27

где serverTimezone = America/Bogota и sessionVariables = time_zone='America/Bogota'

проблема в формировании строки подключения в классе StiMySqlDatabase.

Я формирую строку так:

Код: Выделить всё

		StringBuilder reportConnection = new StringBuilder();

		reportConnection.append("host=");
		reportConnection.append((String)session.getAttribute("host"));
		reportConnection.append(";database=");
		reportConnection.append((String)session.getAttribute("database"));
		reportConnection.append(";user=");
		reportConnection.append((String)session.getAttribute("user"));
		reportConnection.append(";password=");
		reportConnection.append((String)session.getAttribute("password"));
		reportConnection.append(";serverTimezone=America/Bogota");
		reportConnection.append(";sessionVariables=\"time_zone='America/Bogota'\"");
а потом присваюваю классу MySQL так:

Код: Выделить всё

				((StiMySqlDatabase)database).setConnectionString(reportConnection.toString());
				((StiMySqlDatabase)database).setUser((String)session.getAttribute("user"));
				((StiMySqlDatabase)database).setPassword((String)session.getAttribute("password"));
Проблема в том, что это не работает, видомо из-за символа "=" в параметре sessionVariables, который нужно экранировать, но я не знаю как.

Проверте, пожалуйста, как происходит формирование jdbc connection string из StiMySqlDatabase. Если сейчас движок отчета не поддерживает такой вид connectionString - пожалуйста, добавьте.

Спасибо.
Vadim
Сообщения: 97
Зарегистрирован: 04 апр 2013, 08:26

Re: Инициализация соединения

Сообщение Vadim » 26 дек 2017, 09:31

Здравствуйте.
Используйте значение параметра без двойных кавычек

Код: Выделить всё

sessionVariables=time_zone='America/Bogota'
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Re: Инициализация соединения

Сообщение alexeyfressko » 26 дек 2017, 12:47

Так:

Код: Выделить всё

		reportConnection.append("host=");
		reportConnection.append((String)session.getAttribute("host"));
		reportConnection.append(";database=");
		reportConnection.append((String)session.getAttribute("database"));
		reportConnection.append(";user=");
		reportConnection.append((String)session.getAttribute("user"));
		reportConnection.append(";password=");
		reportConnection.append((String)session.getAttribute("password"));
		reportConnection.append(";serverTimezone=America/Bogota");
		reportConnection.append(";sessionVariables=time_zone='America/Bogota'");
не работает.

Временная зона на сервера не изменилась.
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Re: Инициализация соединения

Сообщение alexeyfressko » 26 дек 2017, 12:55

Если указываю неправильную временную зону, то ошибка показывается только, если в дизайнере соединения нажать на кнопку "Проверка".

В дизайнере при предпросмотре или во вьювере ошибки нет, как будто этот параметр игнорируется.
Vadim
Сообщения: 97
Зарегистрирован: 04 апр 2013, 08:26

Re: Инициализация соединения

Сообщение Vadim » 27 дек 2017, 07:46

Здравствуйте.
Мы исправили передачу параметров во вьювере и предпросмотре, попробуйте новые библиотеки:
https://drive.google.com/file/d/1SaMRIm ... sp=sharing

alexeyfressko писал(а):Если указываю неправильную временную зону, то ошибка показывается только, если в дизайнере соединения нажать на кнопку "Проверка".

В дизайнере при предпросмотре или во вьювере ошибки нет, как будто этот параметр игнорируется.
alexeyfressko
Сообщения: 60
Зарегистрирован: 16 фев 2015, 21:40

Re: Инициализация соединения

Сообщение alexeyfressko » 27 дек 2017, 15:33

Работает.

Последний вопрос:

когда у меня есть запрос вида

Код: Выделить всё

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()) AS DATE
то есть запрос, возвращающий данные в типе DateTime - то в отчете такая дата рендерится в соответствии с настройкой окружения Tomcat (то есть если я в MySQl передаю America/Bogota, но сервер настроен на UTC - все равно будет рендерится как UTC).

Есть ли способ заставить дату рендерится в разных временных зонах, без использования функций Mysql DATE_FORMAT??
Ответить