资讯中心 Info
当前位置:爱尚教育 > 资讯中心 >
使用Java调用存储过程(上篇)
发布日期:2020-08-14 阅读次数:

爱尚教育Javaw优德88 com课堂

使用Java调用存储过程(上篇)

欢迎来到爱尚教育Java技术w优德88 com分享课堂,本次分享的技术内容是Java中JDBC的部分,使用Java调用存储过程。

 

         开发环境:Eclipse+SqlServer 2012。

 

         案例一:使用不带参数的存储过程

         第一步,编写如下数据库脚本,事先创建数据库、数据库表、及存储过程:

--创建Test数据库

create database Test

go

--转到Test数据库

use Test

go

--创建员工表

create table Employee

(

    employeeId int identity(1,1) primary key not null,

    realname varchar(50) not null,

    age int not null

)

go

--添加测试数据

insert into Employee values ('张三',18);

insert into Employee values ('李四',28);

insert into Employee values ('王五',23);

insert into Employee values ('赵六',35);

insert into Employee values ('陈七',16);

go

--创建查询平均年龄的存储过程

create procedure findAvgAge

as

    select avg(age) from Employee;

go

--测试存储过程

exec findAvgAge

         第二步,过去我们在连接数据库的时候主要使用Statement对象 和 PreparedStatement对象,而需要调用存储过程我们就需要使用到CallableStatement对象。

         打开Eclipse创建Dao类、编写如下代码:

package com.test;

 

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class Dao {

 

    // 连接字符串

    private static final String URL = "jdbc:sqlserver://127.0.0.1:1433;databaseName=Test";

    // JDBC驱动

    private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    // 用户名

    private static final String USER = "sa";

    // 密码

    private static final String PASSWORD = "";

 

    // 获取连接

    public Connection getCon() throws SQLException, ClassNotFoundException {

 

        Class.forName(DRIVER);

        Connection con = DriverManager.getConnection(URL, USER, PASSWORD);

        return con;

    }

 

    // 关闭连接

    public void closeCon(Connection con, CallableStatement cs, ResultSet rs) {

 

        if (null != rs)

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        if (null != cs)

            try {

                cs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        if (null != con)

            try {

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

    }

 

    // 调用存储过程获取平均年龄

    public Object findAvgAge() {

 

        String sql = "{call findAvgAge}";

        Connection con = null;

        CallableStatement cs = null;

        ResultSet rs = null;

        Object obj = null;

 

        try {

            con = getCon();

            cs = con.prepareCall(sql);

            rs = cs.executeQuery();

            if (rs.next()) {

                obj = rs.getObject(1);

            }

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        } finally {

            this.closeCon(con, cs, rs);

        }

        return obj;

    }

}

 

案例二:使用带有输入参数的存储过程

         第一步,编写如下数据库脚本,事先创建数据库、数据库表、及存储过程:

--创建员工表

create table Employee

(

    employeeId int identity(1,1) primary key not null,

    realname varchar(50) not null,

    age int not null,

    idCard varchar(50) unique

)

go

--添加测试数据

insert into Employee values ('张三',18, '210443198907892909');

insert into Employee values ('李四',28, '210443198907893009');

insert into Employee values ('王五',23, '210443198907894009');

insert into Employee values ('赵六',35, '210443198907895009');

insert into Employee values ('陈七',16, '210443198907896009');

go

--创建查询指定身份证号的员工名称的存储过程

create procedure findEmployeeByIdCard

@idcard

as

    select name from Employee where idCard=@idcard;

go

         第二步,打开Eclipse创建Dao类、编写如下代码:

    // 调用存储过程获取平均年龄

    public Object findEmployeeByIdCard () {

 

        String sql = "{call findEmployeeByIdCard (?)}";

        Connection con = null;

        CallableStatement cs = null;

        ResultSet rs = null;

        Object obj = null;

 

        try {

            con = getCon();

            cs = con.prepareCall(sql);

            cs.setString("210443198907892909");

            rs = cs.executeQuery();

            if (rs.next()) {

                obj = rs.getString(1);

            }

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        } finally {

            this.closeCon(con, cs, rs);

        }

        return obj;

    }

}

本次爱尚教育Javaw优德88 com分享课堂到此为止,在下篇中将继续分享使用带有输出参数的存储过程的案例及使用带有返回状态的存储过程。

谢谢各位网友支持,下次再见!

 

课程体系
通知公告
  • 爱尚教育_Javaw优德88 com|Pythonw优德88 com|软件测试w优德88 com|WEB前端w优德88 com|数据库w优德88 com|算法与数据结构w优德88 com|数据分析w优德88 com|大数据w优德88 com|新媒体运营w优德88 com
    马老师
    张老师
  • 024-28667511