Java JDBC调用存储过程:无参、输入带参、输出及输出带参

Java JDBC调用存储过程:无参、输入带参、输出及输出带参

示例代码:

package xzg;
 
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, "jack");
            cs.setInt(2, 10);
            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.cnblogs.com/lizm166/p/10318680.html