java对数据库存储过程调用-CallableStatement语句用法
mysql数据库的存储过程:
参数类型:IN,需要往存储过程输入才能保存,OUT不用输入过程直接可以查询,INOUT输入或不输入都可以取出;
DELIMITER // # 分隔符设置为//
DROP PROCEDURE myProc//
CREATE PROCEDURE myProc(IN p1 INT, INOUT p2 INT, OUT p3 INT)
BEGIN
SET p1=10;
SET p2=20;
SET p3=30;
END//
DELIMITER ;
SET @x1=78; — 定义变量x1,内容为78
SET @x2=80; — 定义变量x2,内容为80
CALL myProc(@x1, @x2, @x3); # 调用存储过程
SELECT @x1, @x2, @x3;
—操作实例:
mysql> create database proc;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| BigOb |
| mysql |
| proc |
| school |
+——————–+
5 rows in set (0.00 sec)
mysql> use proc
Database changed
mysql> DELIMITER //
mysql> CREATE PROCEDURE myProc(IN p1 INT, INOUT p2 INT, OUT p3 INT)
-> BEGIN
-> SET p1=10;
-> SET p2=20;
-> SET p3=30;
-> END//
Query OK, 0 rows affected (0.08 sec)
mysql> desc myProc//
ERROR 1146 (42S02): Table ‘proc.myProc’ doesn’t exist
mysql> DELIMITER ; # 将分隔符复位;
mysql> SET @x1=78;– 定义变量x1,内容为78
Query OK, 0 rows affected (0.04 sec)
mysql> SET @x2=80; — 定义变量x2,内容为80
Query OK, 0 rows affected (0.00 sec)
mysql> CALL myProc(@x1, @x2, @x3); # 调用存储过程
Query OK, 0 rows affected (0.07 sec)
mysql> SELECT @x1, @x2, @x3; # 查询这三个变量,p3是OUT类型没有输入存储过程仍然可以输出
+——+——+——+
| @x1 | @x2 | @x3 |
+——+——+——+
| 78 | 20 | 30 |
+——+——+——+
1 row in set (0.00 sec)
——–使用CallableStatement调用mysql存储过程:
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.CallableStatement;
import java.sql.Types;
public class CallableDemo
{
/**
调用存储过程:
DELIMITER // # 分隔符设置为//
DROP PROCEDURE myProc//
CREATE PROCEDURE myProc(IN p1 INT, INOUT p2 INT, OUT p3 INT)
BEGIN
SET p1=10;
SET p2=20;
SET p3=30;
END//
DELIMITER ;
SET @x1=78; — 定义变量x1,内容为78
SET @x2=80; — 定义变量x2,内容为80
CALL myProc(@x1, @x2, @x3); # 调用存储过程
SELECT @x1, @x2, @x3; BEGIN
SET p1=10;
SET p2=20;
SET p3=30;
END//
DELIMITER ;
SET @x1=78; — 定义变量x1,内容为78
SET @x2=80; — 定义变量x2,内容为80
CALL myProc(@x1, @x2, @x3); # 调用存储过程
SELECT @x1, @x2, @x3;
*/
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/proc?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
CallableStatement castmt = null; // 调用存储过程
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “CALL myProc(?, ?, ?)”; // 调用存储过程
castmt = conn.prepareCall(sql); // 获得调用存储过程的处理对象
castmt.setInt(1, 66); // 存储过程的第一个字段是IN类型,必须输入;
castmt.setInt(2, 75); // ……….二……INOUT………
//castmt.registerOutParameter(2, Types.INTEGER); // 注册存储过程参数为sql类型;
//castmt.registerOutParameter(3, Types.INTEGER); // …….
castmt.execute();
System.out.println(“INOUT参数的返回值:” + castmt.getInt(2));
System.out.println(“OUT参数的返回值:” + castmt.getInt(3));
castmt.close();
conn.close();
}
}
/*
ubuntu@xu-desktop:~$ javac -d . work/CallableDemo.java
ubuntu@xu-desktop:~$ java com.mldn.CallableDemo
INOUT参数的返回值:20
OUT参数的返回值:30
存储过程,是一个偏门!
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java对数据库存储过程调用-CallableStatement语句用法》
本文地址:http://www.xiupu.net/archives-161.html
关注公众号:
微信赞赏
支付宝赞赏