在我们的Struts2-Spring应用程序中,我们使用以下代码行访问过程
ServerSession serverSession = null;
ClientSession cSession = null;
serverSession = (ServerSession) SessionManager.getManager().getSession("db_session");
cSession =serverSession .acquireClientSession();
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("usp_list_dept_users");
call.addNamedArgumentValue("p_user_id", user_id);
call.useNamedCursorOutputAsResultSet("RCT1");
List<DatabaseRecord> list = cSession.executeSelectingCall(call);
ListIterator<DatabaseRecord> litr = list.listIterator();
--------------
-------------
-------------
此代码适用于oracle db。但是连接SQLserver db时相同的代码不起作用
List<DatabaseRecord> list = cSession.executeSelectingCall(call);
抛出nullpointerexception
以下是用于连接SQLserver的Session.xml内容
<session xsi:type="server-session">
<name>db_session</name>
<event-listener-classes/>
<logging xsi:type="toplink-log"/>
<login xsi:type="database-login">
<platform-class>org.eclipse.persistence.platform.database.SQLServerPlatform</platform-class>
<user-name>sa</user-name>
<password>testpwd</password>
<sequencing>
<default-sequence xsi:type="native-sequence">
<name>Native</name>
</default-sequence>
</sequencing>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<connection-url>jdbc:sqlserver://172.16.12.7:1433;databaseName=stdentlist</connection-url>
</login>
<connection-pools>
<read-connection-pool>
<name>ReadConnectionPool</name>
</read-connection-pool>
<write-connection-pool>
<name>default</name>
</write-connection-pool>
</connection-pools>
<connection-policy/>
</session>
答案 0 :(得分:2)
堆栈跟踪会有所帮助,但是,存储过程非常适合数据库。
call.useNamedCursorOutputAsResultSet( “RCT1”);
这在SQL Server上没有意义,因为它没有游标输出参数,我假设您的存储过程定义在SQL Server上非常不同,因此您需要一个不同的调用。 SQL Server可以从存储过程返回结果集,因此可能只是删除了被删除的。
还要确保存储过程存在于数据库中。