Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc+t-sql / 14 сообщений из 14, страница 1 из 1
17.02.2012, 10:08:27
    #37666616
laureli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
Выполняю запрос на 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
17.02.2012, 10:15:33
    #37666630
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
laureli,
Любой запрос может возвращать датасет, а может и не возвращать. Например, SELECT возвращает, а UPDATE - нет.
...
Рейтинг: 0 / 0
17.02.2012, 10:47:20
    #37666684
laureli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
ShSerge,

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

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

А как выглядит сам запрос?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2012, 11:09:39
    #37666716
laureli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
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
17.02.2012, 11:17:47
    #37666739
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
Denis Popov,
блин, я подумал он пошутил про T-SQL Ж)
...
Рейтинг: 0 / 0
17.02.2012, 11:24:14
    #37666754
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
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
17.02.2012, 11:25:36
    #37666757
laureli
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc+t-sql
Я правильно понимаю, разгадка в волшебной строчке?
Код: sql
1.
SET NOCOUNT ON



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




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

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

Код: sql
1.
set nocount on



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


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