老板给我一个sqlserver的存储过程让我写一个接口返回随机单据号
DECLARE @FBillNo VARCHAR(50);
EXEC '+@FDBName+'.dbo.p_BM_GetBillNo 1,@FBillNo OUT
SELECT @FBillNo
查了很多资料,终于在不经意间看着那些资料恍然大悟!
先上代码:
public String getBillNo(String AreaDB) {
String BillNo = "";
try {
// driver-class-name
Class.forName(SQLSERVERDRIVER);
// yml文件数据库配置
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 重点是这一句代码,下方解释
String call = "{ call " + AreaDB +".dbo.p_BM_GetBillNo(?,?) }";
CallableStatement callStatement = conn.prepareCall(call);
callStatement.setInt(1,1); // 传入参数
callStatement.registerOutParameter(2, Types.VARCHAR); // 返回结果
callStatement.execute();
BillNo = callStatement.getString(2);
callStatement.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return BillNo;
}
看了很多资料都是{ call get**(?,?) },一开始根本看不懂,后来仔细一想,第一个代码段里最重要的是第二行,第一三行可以忽略;入参和结果都需要配置,知识点又增加了,真好!