使用Java调用存储过程(上篇)
欢迎来到爱尚教育Java技术培训分享课堂,本次分享的技术内容是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;
}
}
本次爱尚教育Java培训分享课堂到此为止,在下篇中将继续分享使用带有输出参数的存储过程的案例及使用带有返回状态的存储过程。
谢谢各位网友支持,下次再见!
上一篇: 什么是大数据?大数据能做什么?
下一篇: 为什么我建议你一定要学Python?