maven项目jdbc连接sql server数据库,并调用存储过程示例

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;
            }
        }
    }

你可能感兴趣的:(SSM,Maven,数据库,maven,sqlserver,java)