Java中如何实现使用"JDBC调用存储过程"呢?

乔欣 Java经验 发布时间:2023-02-12 19:34:02 阅读数:10769 1
下文笔者讲述jdbc调用存储过程的 "无参、输入带参、输出及输出带参"的示例分享

JDBC调用存储过程的实现思路

使用CallableStatement cs = conn.prepareCall("conn","存储过程名")
  cs.***  发送参数
  cs.executeQuery运行返回相关信息
例:
JDBC操作存储过程的示例分享
package com.java265;
 
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
 
public class JDBCtest {
    public static void main(String[] args) {
        //test();
        //test2();
        test3();
    }
   /*
    * 命令行创建的存储过程函数为: create procedure all_user() select * from user;
    *    创建一个查询所有内容的存储过程
    * 调用无参存储过程
    */
    static void test() {
        Connection conn = Dbutil.open();
        try {
            //存储过程函数固定格式:{call xxx}
            CallableStatement cs = conn.prepareCall("{call all_user()}");
            ResultSet rs = cs.executeQuery();
            while (rs.next()) {
                int id = rs.getInt(1);
                String name = rs.getString(2);
                int age = rs.getInt(3);
                System.out.println(id + "," + name + "," + age);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Dbutil.close(conn);
        }
    }
       /*
        * 命令行创建的存储过程函数为:
        * create procedure insert_user(in myname varchar(20),
        * in myage tinyint(20)) insert user(username,age) values(myname,myemail);
*  表示创建一个插入myname,数据类型为varchar(20); myage,数据类型为tinyint(20)的存储过程
        * 调用输入带参存储过程
        */
    static void test2() {
        Connection conn = Dbutil.open();
        try {
            CallableStatement cs = conn.prepareCall("{call insert_user(?,?)}");
            cs.setString(1, "maomao");
            cs.setInt(2, 18);
            cs.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Dbutil.close(conn);
        }
    }
       /*
        * 命令行创建的存储过程函数为:
        *  create procedure getnamebyid(in cid int,
        * out return_name varchar(20)) select username into return_name
        * from user where id =cid;
        * 表示创建一个如果id为cid,那么就输出返回一个return_name
        * 调用输入、输出带参存储过程
        */
    static void test3() {
        Connection conn = Dbutil.open();
        try {
            CallableStatement cs = conn.prepareCall("{call getnamebyid(?,?)}");
            cs.setInt(1, 3);  //索引1,第3个id
            //输出参数的话要注册
            cs.registerOutParameter(2, Types.CHAR);
            //注册后要更新
            cs.execute();
            String name =cs.getString(2);  //这个是索引的意思
            cs.executeQuery();
            System.out.println(name);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Dbutil.close(conn);
        }
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202302/16762019645753.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者