2016-09-16 2 views
0

Здесь просто, например. of Как я использую callablestatementJDBC вызываемый оператор возвращает null resultet, если temp tabel используется в SP

Connection con = getConnection(); 
CallableStatement call = con.prepareCall("{call SpName(?, ?)}"); 
call .setObject(1, params[0]); 
call .setObject(2, params[1]); 
call .execute(); 
ResultSet rs = call .getResultSet(); 

Это нормально работает для всех SP. Но если в SP есть таблица темпа, она возвращает null Resultset.

+1

Покажите нам хранимую процедуру, а затем, возможно, мы сможем вам помочь. –

+1

Вы не проверяете результат 'execute', его логическое возвращаемое значение показывает, является ли первый результат числом обновления или результирующим набором. И если вы не использовали 'set nocount on' в своей хранимой процедуре, тогда первый результат (ы) будет числом обновлений. См. Также http://stackoverflow.com/questions/14829130/null-resultsets-when-calling-sybase-stored-procedure-through-jdbc и http://stackoverflow.com/questions/14690295/execute-sp-msforeachdb- in-a-java-application –

+0

@MarkRotteveel: спасибо, что ты прав, я нашел тот же ответ из какой-то другой ссылки, о которой я упомянул в ответ. –

ответ

1

решить мою проблему, добавив этот код

while (true) { 
    rs = cstmt.getResultSet(); 
    int updateCount = cstmt.getUpdateCount(); 
    LogWriter.write(" Update count " + updateCount); 
    if (rs == null && updateCount == -1) { 
     break; 
    } 
    if (rs != null) { 
     // process the result set 
    } else { 
     System.out.println("Update count = " + cstmt.getUpdateCount()); 
    } 
    cstmt.getMoreResults(); 
} 

Ссылка: Here