您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 编程语言综合 >> 正文

java调用mysql存储过程实例分析

作者:佚名    责任编辑:admin    更新时间:2022-06-22

   本文实例讲述了java调用mysql存储过程的方法。分享给大家供大家参考。具体如下:

  数据库的测试代码如下 :

  1、新建表test

  ?

1 2 3 4 5 create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1);

  2、删除已存在的存储过程:

  ?

1 2 3 -- 删除储存过程 delimiter // -- 定义结束符号 drop procedure p_test;

  3、mysql存储过程定义:

  ?

1 2 3 4 5 6 create procedure p_test() begin declare temp int; set temp = 0; update test set field1 = values(temp); end

  4、调用方法:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 CallableStatement cStmt = conn.prepareCall("{call p_test()}"); cStmt.executeUpdate(); import java.sql.*; /** iGoder */ public class ProcedureTest { /* 表和存储过程定义如下: delimiter // DROP TABLE if exists test // CREATE TABLE test( id int(11) NULL ) // drop procedure if existssp1 // create procedure sp1(in p int) comment 'insert into a int value' begin declare v1 int; set v1 = p; insert into test(id) values(v1); end // drop procedure if exists sp2 // create procedure sp2(out p int) begin select max(id) into p from test; end // drop procedure if exists sp6 // create procedure sp6() begin select * from test; end// */ public static void main(String[] args) { //callIn(111); //callOut(); callResult(); } /** * 调用带有输入参数的存储过程 * @param in stored procedure input parametervalue */ public static void callIn(int in){ //获取连接 Connection conn = ConnectDb.getConnection(); CallableStatement cs = null; try { //可以直接传入参数 //cs = conn.prepareCall("{call sp1(1)}"); //也可以用问号代替 cs = conn.prepareCall("{call sp1(?)}"); //设置第一个输入参数的值为110 cs.setInt(1, in); cs.execute(); } catch (Exception e) { e.printStackTrace(); } finally { try { if(cs != null){ cs.close(); } if(conn != null){ conn.close(); } } catch (Exception ex) { ex.printStackTrace(); } } } /** * 调用带有输出参数的存储过程 * */ public static void callOut() { Connection conn = ConnectDb.getConnection(); CallableStatement cs = null; try { cs = conn.prepareCall("{call sp2(?)}"); //第一个参数的类型为Int cs.registerOutParameter(1, Types.INTEGER); cs.execute(); //得到第一个值 int i = cs.getInt(1); System.out.println(i); } catch (Exception e) { e.printStackTrace(); } finally { try { if(cs != null){ cs.close(); } if(conn != null){ conn.close(); } } catch (Exception ex) { ex.printStackTrace(); } } } /** * 调用输出结果集的存储过程 */ public static void callResult(){ Connection conn = ConnectDb.getConnection(); CallableStatement cs = null; ResultSet rs = null; try { cs = conn.prepareCall("{call sp6()}"); rs = cs.executeQuery(); //循环输出结果 while(rs.next()){ System.out.println(rs.getString(1)); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(rs != null){ rs.close(); } if(cs != null){ cs.close(); } if(conn != null){ conn.close(); } } catch (Exception ex) {