欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-06 23:29:58
...

数据库表结构

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

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;
    }

}