一、存储过程
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存斜体样式储过程的名字并给定参数(需要时)来调用执行。
二、mysql语法
创建存储过程:
create procedure sp_name (params)
begin
// sql 代码
end
其中params常用类型有两种:in 表示输入参数;out表示输入参数(可理解为函数的返回结果)
调用存储过程:
call sp_name(params)
三、CallableStatement的使用
CallableStatement是用来执行调用存储过程的sql语句的类
1、准备工作
新建数据库表,语句如下:
create table user(
id int auto_increment primary key,
username varchar(50),
password int(11)
)
数据库连接工具
public class DBUtils {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/YuanHang";
private static final Properties props = new Properties();
static {
props.setProperty("user", "root");
props.setProperty("password", "root");
props.setProperty("useUnicode", "true");
props.setProperty("characterEncoding", "UTF-8");
}
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, props);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conn;
}
}
2、无参存储过程
存储过程命名:sp表示存储过程;select代表功能是查询;nofilter表示无参数
CREATE PROCEDURE test_study()
BEGIN
select username, `password` from user;
END
java调用
public static void selectAll() throws SQLException {
try(Connection conn = DBUtils.getConnection();
// caution: call 调用存储过程括号可选,
CallableStatement cstat = conn.prepareCall("test_study")) {
cstat.execute();
ResultSet rs = cstat.getResultSet();
while(rs.next()) {
System.out.println(rs.getString(1) + "\t" + rs.getInt(2));
}
}
}
值得注意的是:
1、prepareCall方法参数的书写形式:call sp_name(params),即在mysql数据库中调用存储过程的语句。
2、当存储过程执行后的结果是结果集时,可以通过getResultSet方法获取此结果集