下面为您详细讲解“JDBC调用MySQL存储过程实现代码”的完整攻略。
什么是存储过程
存储过程是预先编译好的一段 SQL 代码,存储在数据库中,并可返回结果或影响数据库状态。其使用方法类似于函数,可以传递参数,执行一些特定操作,并返回结果集或状态。
创建存储过程
在 MySQL 中,可以使用以下语法创建一个简单的存储过程:
DELIMITER //
CREATE PROCEDURE simple_proc(IN param INT)
BEGIN
SELECT * FROM table_name WHERE column_name = param;
END //
DELIMITER ;
以上语句中,首先通过 DELIMITER
命令定义分隔符为 //
,因为存储过程中也包含 ;
分号,分隔符的更换可以避免语法错误。
然后使用 CREATE PROCEDURE
创建一个名为 simple_proc
的存储过程,该存储过程以 param
为参数,并从 table_name
表中查询 column_name
与 param
相等的数据。
最后通过 DELIMITER
命令将分隔符改回 ;
。
调用存储过程
使用 JDBC 调用存储过程,主要需要了解下面三个类:
java.sql.CallableStatement
: 用于调用存储过程的接口类。java.sql.Types
: 各种数据类型的变量类型常量。java.sql.ResultSet
: 结果集,存储从数据库中返回的数据。
以下是一个使用 JDBC 调用存储过程的示例:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class JdbcDemo {
public static void main(String[] args) {
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 创建 CallableStatement
CallableStatement stmt = conn.prepareCall("{CALL simple_proc(?)}");
// 设置参数
stmt.setInt(1, 123);
// 注册 OUT 参数
stmt.registerOutParameter(2, Types.VARCHAR);
// 执行存储过程
boolean hadResults = stmt.execute();
// 处理结果集
while (hadResults) {
ResultSet rs = stmt.getResultSet();
while (rs.next()) {
System.out.println(rs.getString(1));
}
hadResults = stmt.getMoreResults();
}
// 处理 OUT 参数
String outString = stmt.getString(2);
System.out.println(outString);
// 关闭 CallableStatement 和 Connection
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在该示例中,首先加载了 MySQL JDBC 驱动,获取了与数据库的连接。接着使用连接创建了一个 CallableStatement
,通过 {CALL simple_proc(?)}'
语法指定调用名为 simple_proc
的存储过程,并设置了存储过程的参数。然后通过 stmt.execute()
方法执行存储过程并获取结果集。最后通过 stmt.getString(2)
获取 OUT 参数的值。
多条示例说明
以下是另外一条使用 JDBC 调用存储过程的示例:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
public class JdbcDemo {
public static void main(String[] args) {
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 创建 CallableStatement
CallableStatement stmt = conn.prepareCall("{CALL get_name_by_id(?)}");
// 设置参数
stmt.setInt(1, 123);
// 注册 OUT 参数
stmt.registerOutParameter(2, Types.VARCHAR);
// 执行存储过程
boolean hadResults = stmt.execute();
// 处理结果集
while (hadResults) {
ResultSet rs = stmt.getResultSet();
while (rs.next()) {
System.out.println(rs.getString(1));
}
hadResults = stmt.getMoreResults();
}
// 处理 OUT 参数
String outString = stmt.getString(2);
System.out.println(outString);
// 关闭 CallableStatement 和 Connection
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在该示例中,使用 JDBC 调用了名为 get_name_by_id
的存储过程,并从 table_name
表中查询 name
字段对应 id
的数据,最后获取 OUT 参数的值。
以上就是使用 JDBC 调用 MySQL 存储过程的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jdbc调用mysql存储过程实现代码 - Python技术站