MySql储存过程中传参和不传参以及java中调用代码

数据库 同时被 2 个专栏收录
1 篇文章 0 订阅
3 篇文章 0 订阅

数据库表结构

这里写图片描述

1.mysql不传参写存储过程

create procedure product()   --  product为存储过程名称
begin

        select * from book;

end

调用此存储过程为

CALL product

2.有传参的存储过程

CREATE PROCEDURE  updateInfo(

        in b_new_name VARCHAR(100),      --  传入的字段类型为VARCHAR

        in b_id BIGINT(20),

        out b_result_name VARCHAR(100)    --  返回的字段类型为VARCHAR
)

BEGIN

   UPDATE book  t SET t.NAME= b_new_name WHERE t.book_id= b_id; 
   SELECT b.`name`  from book b WHERE b.book_id=b_id  INTO b_result_name;   --  into到传入参数只有才可以在外部拿到值
End

3.使用java程序调带参数和不带参数的存储过程

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;

public class Main {
    public static void main(String[] args) {
        // selectDateFromMysql(conn());   //连接数据库
        //unParamCall();   //执行无参存储过程
        paramCall();    //执行有参数存储过程
    }

    /**
     * 执行有参数存储过程
     */
    private static void paramCall() {
        Connection con = null;
        CallableStatement csm = null;
        ResultSet res = null;
        try {
            //创建一个一个数据库连接
            con = conn();
            //执行存储过程
            csm = con.prepareCall("{ call updateInfo(?,?,?)}");   //传入参数和输出参数通配符,一种有三个参数
            csm.setString(1, "语文");   //第一个参数为 字符串类型 语文
            csm.setInt(2,2);    //第二个参数为整型,Index 为2
            csm.registerOutParameter(3,Types.VARCHAR);  //第三个参数为输出结果,为数据库表中列的类型,即数据库的类型,Types类中有所有数据库的常见类型
            csm.execute();
            System.out.println(csm.getString(3));   //输入执行的第三个参数,为结果参数,打印出来
            csm.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 执行无参储存过程
     */
    private static void unParamCall() {
        Connection con = null;
        CallableStatement csm = null;
        ResultSet res = null;
        Book b = new Book();
        try {
            //创建一个一个数据库连接
            con = conn();
            //执行存储过程
            csm = con.prepareCall("{ call product()}");   //存储过程和查数据区别在这里
            res = csm.executeQuery();
            while (res.next()) {
                b.setId(res.getInt(1));
                b.setName(res.getString("name"));
                b.setNumber(res.getInt(3));
                b.setDetail(res.getString(4));
                System.out.println(b.toString());
            }
            res.close();
            csm.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }

    /**
     * 执行数据库连接和简单查询
     */
    private void selectDateFromMysql(Connection con) {
        Statement stm = null;
        String sql = null;
        ResultSet res = null;
        Book b = new Book();
        try {
            stm = con.createStatement();
            sql = "select * from book";
            res = stm.executeQuery(sql);
            while (res.next()) {
                int id = res.getInt("book_id");
                b.setId(id);
                String name2 = res.getString("name");
                b.setName(name2);
                int number = res.getInt(3);
                b.setNumber(number);
                String detail = res.getString(4);
                b.setDetail(detail);
                System.out.println(b.toString());
            }
            res.close();
            stm.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 建一个数据库连接
     *
     * @return
     */
    private static Connection conn() {
        String sql = null;
        String name = "root";
        String pass = "123456";
        String url = "jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8";
        Connection con = null;
        try {
            System.out.println("开始进行登陆操作*************");
            con = DriverManager.getConnection(url, name, pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }

}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

wo_buzhidao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值