powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc+t-sql
14 сообщений из 14, страница 1 из 1
jdbc+t-sql
    #37666616
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполняю запрос на t-sql.
Код: java
1.
2.
CallableStatement st = connect.prepareCall(sql);        
ResultSet rs =  st.executeQuery();


получаю ошибку
Код: plaintext
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.

Однако, если напишу так
Код: java
1.
2.
3.
CallableStatement st = connect.prepareCall(sql);        
st.execute();
ResultSet rs =  st.executeQuery();


все отрабатывает, и я получаю нужный результат.

Видимо, выполнение зависит от количества select-ов в скрипте? Подскажите как правильно выполнять запросы на t-sql?
Спасибо
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666630
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laureli,
Любой запрос может возвращать датасет, а может и не возвращать. Например, SELECT возвращает, а UPDATE - нет.
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666684
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge,

так что, если мы знаем, что в конце концов должны получить result set, так и выполнять сначала execute? Это же неправильно..
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666698
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.02.2012 11:47, laureli wrote:

> так что, если мы знаем, что в конце концов должны получить result set, так и выполнять сначала execute? Это же неправильно..

А как выглядит сам запрос?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666716
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov,
Код: sql
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.
DECLARE @day datetime,@start datetime,@minstart datetime,@maxend datetime,@end datetime,@stddev float
SET @start = convert(datetime,'02/10/2012',101)
SET @end = convert(datetime,'02/17/2012',101)

SELECT @minstart = min(event_time), @maxend = max(event_time)
FROM my_user.audit_table

IF @start < @minstart OR @start IS NULL SET @start = @minstart
IF @end > @maxend OR @end IS NULL SET @end = @maxend

SELECT @stddev = STDEV(all_count)
FROM
(
	SELECT count(1) AS all_count
	FROM my_user.audit_table
	WHERE event_class in (14, 20)
		AND event_time BETWEEN @start AND @end
	GROUP BY CONVERT(datetime, CONVERT(varchar, event_time, 112), 112)
) AS t

SET @day = dateadd(dd, -1, @start)

DECLARE @t TABLE (day datetime PRIMARY KEY)

WHILE @day < @end
BEGIN
	INSERT INTO @t VALUES (@day)
	SET @day = dateadd(dd, 1, @day)
END


SELECT 	a.day,
	sum(CASE WHEN t.event_class = 14 THEN 1 ELSE 0 END) AS success_count,
	sum(CASE WHEN t.event_class = 20 THEN 1 ELSE 0 END) AS failure_count,
	@stddev AS stdev_all_count,
	CASE WHEN CONVERT(float, count(t.event_class)) > @stddev * 1.2 THEN 1 ELSE 0 END AS flagged_activity
FROM   @t AS a
	LEFT OUTER JOIN  my_user.audit_table AS t
		ON t.event_time BETWEEN a.day AND dateadd(dd, 1, a.day)
		AND t.event_time BETWEEN @start AND @end
		AND t.event_class IN (14, 20)
GROUP BY a.day
ORDER BY a.day
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666739
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,
блин, я подумал он пошутил про T-SQL Ж)
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666754
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laureli,
Вы документацию почитайте. Там четко написано, что executeQuery может вернуть только один ResultSet, т.е. от первого запроса. У вас же много запросов, они возвращают много результатов (внимание!!! результат != ResultSet, ResultSet это лишь один из типов) и первый их них не возвращает ResultSet. Поэтому вам надо делать следующее:
Код: java
1.
2.
3.
4.
CallableStatement st = connect.prepareCall(sql);        
st.execute();
// тут надо дойти до ResultSet путем вызова st.getMoreResults(), см. документацию 
ResultSet rs = st.getResultSet();



http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html#getMoreResults%28%29
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666757
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я правильно понимаю, разгадка в волшебной строчке?
Код: sql
1.
SET NOCOUNT ON



Если строки не считаются, то можно сразу получить resultSet, иначе получить результат помогает execute...
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666765
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laureliЯ правильно понимаю, разгадка в волшебной строчке?
Код: sql
1.
SET NOCOUNT ON




Если строки не считаются, то можно сразу получить resultSet, иначе получить результат помогает execute...
в ХП её надо вставлять первой строкой, т.к. "все" дрова сходят с ума.
Есть такая магия.
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666770
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laureli,
а вообще OFF - переписать без T-SQL или завернуть в ХП
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666771
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

getMoreResults() всегда возвращает false
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666772
laureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо!
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666782
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laureli, добавь первой строкой:

Код: sql
1.
set nocount on



И работай через первый вариант.
...
Рейтинг: 0 / 0
jdbc+t-sql
    #37666830
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laurelisvenom,
getMoreResults() всегда возвращает false
Нет, в документации четко написано, когда именно он возвращает false.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc+t-sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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