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

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16639.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论