jdbc调用存储过程
使用mysql数据库
-
在mysql中选择好数据库(我的mysql版本是8.0.25)
-
创建一个存储过程
# 在MySQL中每行命令都是用“;”结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而DELIMITER原本就是“;”的意思,因此用这个命令转换一下“;”为“$$”,这样只有收到“$$”才认为指令结束可以执行 DELIMITER $$ # IN 输入参数,OUT 输出参数 CREATE PROCEDURE register(IN username varchar(20),IN userpass varchar(20),OUT userid int) BEGIN insert into userinfo(userName,userPass)values(username,userpass); select LAST_INSERT_ID() INTO userid; END $$
-
mysql中调用存储过程
# 设置一个变量接收输出参数 set @userid=0; # 调用 CALL register('存储过程','ccgc',@userid); # 查询输出参数结果 select @userid;
使用jdbc调用存储过程
-
引入mysql8的驱动jar包
使用maven或手工引入都可以
-
jdbc调用程序
package com.kfm.config; import java.sql.*; public class DBHelper { public static void callProcedure() throws SQLException, ClassNotFoundException { // 加载sql驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/eshop?serverTimezone=UTC", "root", "password"); // 装载存储过程 CallableStatement callableStatement = conn.prepareCall("{CALL register(?,?,?)}"); //设置sql语句的参数 callableStatement.setObject(1, "jdbc"); callableStatement.setObject(2, "jdbc"); callableStatement.registerOutParameter(3, Types.INTEGER); // 执行存储过程 callableStatement.executeUpdate(); //获取输出参数的值 int userid=callableStatement.getInt(3); System.out.println(userid); //关闭连接 callableStatement.close(); conn.close(); } // 测试 public static void main(String[] args) { try { callProcedure(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } }