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