Если чесно пока об этом не желею. При решении задачь исмользую сервер баз данных на MS SQL 2005. Драйвера доступа (JDBC) скачал с офф. сайта www.microsoft.com
В данном посте расматривается задача об использовании в Java хронимых процедур из SQL Server.
При написании данного класса у меня возникла проблема. Хронимая процедура выполняет разузловку изделия и выводит таблицу вхождения материалов в изделие (Он приводился в более ранних постах). Процедура иполнена в стиле CURSORO-в в связи с этим возникли затруднения при решении задачи.
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
public class connectDS {
public static void main(String[] args) {
// Declare the JDBC objects.
Connection con = null;
CallableStatement cstmt = null;
ResultSet rs = null;
try {
// Establish the connection.
SQLServerDataSource ds = new SQLServerDataSource();
ds.setUser("sa");
ds.setPassword("MyPass");
ds.setServerName("127.0.0.1");
ds.setPortNumber(1433);
ds.setDatabaseName("pubs");
con = ds.getConnection();
// Execute a stored procedure that returns some data.
cstmt = con.prepareCall("{call dbo.RET_ShowStructItem1(?)}");
cstmt.setString(1, "3.020.324.007-001");
cstmt.execute();
while (!cstmt.getMoreResults() && (cstmt.getUpdateCount() != -1)) {
}
rs = cstmt.getResultSet();
while (rs.next()) {
System.out.println(rs.getString("item"));
System.out.println(rs.getString("description"));
System.out.println();
}
} // Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
}
}
if (cstmt != null) {
try {
cstmt.close();
} catch (Exception e) {
}
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
}
}
System.exit(1);
}
}
}
Данный код приведенный выше работает и уже модефицированн.
Проблема заключается в том что процедура в момент обработки при каждом выполнении (INSERT, UPDATE, SELECT) возвращает результат выполнения это можно отключить в процедуре командой SET NOCOUNT ON либо при написании класса использовать цикл
while (!cstmt.getMoreResults() && (cstmt.getUpdateCount() != -1)) {}
Для коректности лудше вставить туда обработчики исключений.
P.S.:Пример от Microsoft
Комментариев нет:
Отправить комментарий