java 执行SQL Server 存储过程

存储过程 有 2个输入参数 为 int nvarchar 类型 1个输出参数 nvarchar类型

……

String orderNo=""; // 返回值
con=BaseDao.getConn(); //获取连接
CallableStatement cstmt=null;
try {
cstmt=con.prepareCall("{?=call proc_createOrder(?,?)}");
cstmt.setInt(2,uid );
cstmt.setString(3,cardNoList);
cstmt.registerOutParameter(1,java.sql.Types.NVARCHAR);
cstmt.execute();
orderNo=cstmt.getString(1);
return orderNo;
} catch (SQLException e) {
e.printStackTrace();
}finally{
BaseDao.closeAll(con, cstmt, rs);
}
return orderNo;

……

请帮忙检查下应该如何改

这个要结合你的存储过程来看哪里有问题。
如果是运行出错,贴出
e.printStackTrace();
打印的错误信息。

Exception in thread "main" java.lang.NullPointerException
at com.microsoft.sqlserver.jdbc.AppDTVImpl$SetValueOp.executeDefault(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.executeOp(Unknown Source)
at com.microsoft.sqlserver.jdbc.AppDTVImpl.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.Parameter.sendByRPC(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.sendParamsByRPC(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(Unknown Source)
at com.jzlg.dao.imple.IOrdersdaoImple.addOrdersAndOrderDetail(IOrdersdaoImple.java:168)
at com.jzlg.dao.imple.IOrdersdaoImple.main(IOrdersdaoImple.java:180)

我在这个方法(addOrdersAndOrderDetail)外面写了个Main 方法验证出了以上的异常    

空指针异常,你的这句执行后cstmt=con.prepareCall("{?=call proc_createOrder(?,?)}")获得了CallableStatement吗?我也是新手,也许不对

try catch 捕获一下异常,然后打印出来看看是怎么回事儿

使用logcat捕捉每一步骤的信息,无论是正确的还是错误的

拜托 各位大神不要把问题复杂化 真正问题如下
java 执行SQL Server 存储过程 存储过程 有 2个输入参数 为 int nvarchar 类型 和 1个输出参数 nvarchar类型(一共3个参数)

    cstmt=con.prepareCall("{?=call proc_createOrder(?,?)}");  这句和下面的给参数赋值怎么写?