powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.x + JAVA option
6 сообщений из 6, страница 1 из 1
ASE 12.5.x + JAVA option
    #35891490
Apucmokpam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала несколько общих вопросов.
Кто-нибудь вообще использует встроенную JAVA? (Хотя бы это уже интересно)
Пока всего лишь предпринимаю попытку уйти от курсоров и сделать некоторые процедуры более читабельными. Стоит ли вообще заморачиваться насчет "уйти от курсоров"?

А проблема вот какая. Нужно написать свою функцию в ASE 12.5.x. Для этого пишется JAVA класс со статическим методом и заливается в БД, все нормально. Только в процессе вычислений необходимо сделать и обработать запрос. Для этого получаем Connection методом

The connecter( ) Method
// A JDBCExamples method to get a connection.
// It can be called from the server with argument ’default’,
// or from a client, with an argument that is the server name.
public static Connection connecter(String server)
throws Exception, SQLException, ClassNotFoundException {
String forName="";
String url="";
if (server=="default") { // server connection to current server
forName = "sybase.asejdbc.ASEDriver";
url = "jdbc:default:connection";
} else if (server!="default") { //client connection to server
forName= "com.sybase.jdbc.SybDriver";
url = "jdbc:sybase:Tds:"+ server;
}
String user = "sa";
String password = "";
// Load the driver
Class.forName(forName);
// Get a connection
Connection con = DriverManager.getConnection(url,user, password);
return con;
}

тупо копипаст из "Java in Adaptive Server® Enterprise"

и делаем запрос. Вобщем не важно какой запрос. Важно, что у него есть такая строчка:
String q = "<Тело запроса собирается по строчкам>";
q=q+"and SectionName='"+sec+"' ";

sec - это входной параметр для требуемой функции, типа String и содержит русские символы. Если эту строку закомментировать - все нормально. Если попросить функцию вернуть тело запроса и выполнить запрос в sql_adv, тоже все нормально. А если запрашивать из JAVA как есть, то результат запроса пустой.

Подозреваю, что проблема с кодировками\чарсетами\чем-то там, но уже продолбался с этим достаточно долго и ничего не придумалось. Может кто знает, что нужно сделать с коннекшеном или еще с чем?
...
Рейтинг: 0 / 0
ASE 12.5.x + JAVA option
    #35891591
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apucmokpam пишет:
> Кто-нибудь вообще использует встроенную JAVA? (Хотя бы это уже интересно)

Кто-то наверное использует.

> Пока всего лишь предпринимаю попытку уйти от курсоров и сделать
> некоторые процедуры более читабельными. Стоит ли вообще заморачиваться
> насчет "уйти от курсоров"?

нет. За счёт применения Java процедуры более читабельными не станут.
По очень простой причине -- Java - язык гораздо более низкоуровневый,
чем TSQL. Правда, TSQL не универсальный. Но для приложений в БД это
не важно, поскольку там сложных алгоритмов не бывает.

> попросить функцию вернуть тело запроса и выполнить запрос в sql_adv,
> тоже все нормально. А если запрашивать из JAVA как есть, то результат
> запроса пустой.

А где вы хотите этот результат увидеть ? как вы предполагаете его обнаружить ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5.x + JAVA option
    #35891688
Apucmokpam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, так будет правильнее. Предыдущий удалите плз.

MasterZiv
> попросить функцию вернуть тело запроса и выполнить запрос в sql_adv,
> тоже все нормально. А если запрашивать из JAVA как есть, то результат
> запроса пустой.

А где вы хотите этот результат увидеть ? как вы предполагаете его обнаружить ?


О, это очень просто. От этого результата зависит значение функции, ради которой все и затевалось :)
...
Рейтинг: 0 / 0
ASE 12.5.x + JAVA option
    #35894118
Apucmokpam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему можно немного упростить.
Вот такой класс компилится и заливается в БД:

Код: 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.
 import  java.sql.*;
 public   class  NewClass {
	 public   static  Connection connecter()
	   throws  Exception, SQLException, ClassNotFoundException {
		String forName="sybase.asejdbc.ASEDriver";
		String url="jdbc:sybase:asejdbc";
		 Class .forName(forName);
		Connection con = DriverManager.getConnection(url);
		 return  con;
	}

	 public   static  String test(String sec) {
		 try  {
			Connection con =connecter();
			con.createStatement().executeQuery("insert into #log select '"+sec+"'as 's'"); // вставить строку sec в таблицу #log
		}  catch  ( Exception e ) {
			 if  (e.getMessage().equals( null )) {
				result="Unknown Java Exception";
			}  else  {
				result=e.getMessage();
			}
		}
		 return  sec;
	}
}

После чего выполняем в sql_adv запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table #log (
	s varchar( 1000 )
)

select NewClass.test('privet'),NewClass.test('привет') 
-- тут получаем "privet", "привет" как и ожидалось
select * from #log
-- а тут получаем примерно вот что "privet", "привет" - оно даже скопипаститься нормально не может :)))
drop table #log

Т.е. при передаче запроса через con, что-то нехорошее происходит с телом запроса, а именно с русскими буквами... Что можно сделать с коннекшеном\настройками сервера? Есть конечно обходной путь, но он мне не нравится...

P.S. Нет, судя по количеству откликов и обсуждений в разных форумах JAVA в ASE мало кто использует...
...
Рейтинг: 0 / 0
ASE 12.5.x + JAVA option
    #35894651
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apucmokpam,

Конечно мало. Ты на цену-то её смотрел ? Да ещё под enterprize платформу ...
вот будет 15 больше использоваться (через год 12.5 end-of-life-ится, так что деваться некуда ...),
будут больше использовать. Там это входит в базовую поставку.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ASE 12.5.x + JAVA option
    #37849887
nigga_djan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApucmokpamТ.е. при передаче запроса через con, что-то нехорошее происходит с телом запроса, а именно с русскими буквами... Что можно сделать с коннекшеном\настройками сервера? Есть конечно обходной путь, но он мне не нравится...

Нашли в чем проблема была, а то я тоже с этим столкнулся?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.x + JAVA option
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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