1、导入maven关于sql server依赖
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
</dependency>
2、jdbc连接sql server数据并调用存储过程
//sql server 驱动name
final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//sql server 数据库ip,端口以及数据库名称
final String DATABASE_URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test";
//sql server 用户名
final String DATABASE_USRE = "root";
//密码
final String DATABASE_PASSWORD = "1234";
//执行的存储过程 dbo - 数据库名称 ;procedure - 存储过程名称 ; ?占位符- 存储过程的入参和出参
/**
* 其中?占位符为IN、OUT 还是INOUT 参数
* 将IN 参数传给 CallableStatement 对象是通过 setXXX 方法完成的。该方法继承自
* PreparedStatement。所传入参数的类型决定了所用的setXXX 方法(例如,用 setFloat 来传入
* float 值等)。
* 如果已储存过程返回 OUT 参数,则在执行 CallableStatement 对象以前必须先注册每个OUT
* 参数的 JDBC 类型(这是必需的,因为某些 DBMS 要求 JDBC 类型)。注册 JDBC 类型是用
* registerOutParameter 方法来完成的。语句执行完后,CallableStatement 的 getXXX 方法将取回
* 参数值。正确的 getXXX 方法是为各参数所注册的 JDBC 类型所对应的 Java 类型。换言之,
* registerOutParameter 使用的是 JDBC 类型(因此它与数据库返回的 JDBC 类型匹配),而 getXXX将之转换为 Java 类型。
*/
final String PROCEDURE = "{ call [dbo].[procedure](?,?,?,?,?)}";
public void callProcedure(){
Connection conn = null;
CallableStatement stat = null;
try{
//获取数据库连接
Class.forName(DRIVER_CLASS);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USRE, DATABASE_PASSWORD);
//通过Connection 方法 prepareCall 创建CallableStatement对象
stat = conn.prepareCall(PROCEDURE);
/**
* 以下的setXXX(),registerOutParameter(),getXXX()中的1,2,3····均表示
* "{ call [dbo].[procedure](?,?,?,?,?)}" 存储过程的第几个?占位符
*/
//通过setXXX方法进行存储过程入参
stat.setInt(1, 0);
stat.setString(2, "test");
//通过registerOutParameter方法出参
/**
* Types.INTEGER 表示该参数为数值类型
* Types.VARCHAR 表示该参数为字符串类型
* 其他类推
*/
stat.registerOutParameter(3, Types.INTEGER);
stat.registerOutParameter(4, Types.VARCHAR);
stat.registerOutParameter(5, Types.VARCHAR);
//执行
stat.execute();
//输出参数字段对应
//通过getXXX方法获取出参
System.out.println(stat.getInt(3));
System.out.println(stat.getString(4));
System.out.println(stat.getString(5));
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭数据库连接
close(conn, stat);
}
}
//关闭数据库连接
public void close(Connection conn, CallableStatement stat) {
if (stat != null) {
try {
stat.close();
}catch (SQLException e){
e.printStackTrace();
}finally {
stat = null;
}
}
if (conn != null) {
try{
conn.close();
}catch (SQLException e){
e.printStackTrace();
}finally {
conn = null;
}
}
}