packagexzg;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Types;public classJDBCtest {public static voidmain(String[] args) {//test();//test2();
test3();
}/** 命令行创建的存储过程函数为: create procedure all_user() select * from user;
* 创建一个查询所有内容的存储过程
* 调用无参存储过程*/
static voidtest() {
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 voidtest2() {
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 voidtest3() {
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);
}
}
}