用CallableStatement,返回参数要先注册,例如:
存储过程:
CREATE PROCEDURE EquipmentInsert (@EquipmentID NUMERIC(9,0) OUTPUT,@Category VARCHAR(20),@Name nVARCHAR(50),
@Level nchar(5), @NodeID CHAR(4), @AdminNodeID CHAR(4), @Keeper nvarchar(10), @Source varchar(50),
@Using CHAR(1),@EnrollIP char(15), @EnrollUser varchar(20), @Notes varchar(255) )
AS
INSERT INTO Equipment(Category,Name,Level,NodeID,AdminNodeID,Keeper,Source,Using,EnrollIP,EnrollUser,Notes)
values(@Category,@Name,@Level,@NodeID,@AdminNodeID,@Keeper,@Source,@Using,@EnrollIP,@EnrollUser,@Notes)
SELECT @EquipmentID=@@IDENTITY
调用:
 CallableStatement cstmt = conn.prepareCall("{call EquipmentInsert(?,?,?,?,?,?,?,?,?,?,?,?)}");
cstmt.registerOutParameter(1,java.sql.Types.INTEGER);
cstmt.setString(2, "NetManagement"); cstmt.setString(3, Name);
cstmt.setString(4, Level); cstmt.setString(5, NodeID);
cstmt.setString(6, AdminNodeID); cstmt.setString(7, Keeper);
cstmt.setString(8,Source); cstmt.setString(9, "Y");
cstmt.setString(10, EnrollIP); cstmt.setString(11, EnrollUser);
cstmt.setString(12, Notes);
cstmt.executeUpdate();
iEquipmentID=cstmt.getInt(1);/*iEquipmentID是返回值*/