java对数据库存储过程调用-CallableStatement语句用法

数据库的存储过程:
参数类型: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;

—操作实例:
> create database proc;  
Query OK, 1 row affected (0.01 sec)
> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| BigOb              |
|               |
| proc               |
| school             |
+——————–+
5 rows in set (0.00 sec)
> 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..DriverManager;

import java..Connection;

import java..CallableStatement;

import java..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 = “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语句用法
本文地址:https://www.zhiletu.com/archives-161.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微