mybatise 调存储过程
存储过程
create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2) as begin p3:=p1+p2; end;
<!-- mapper.xml --> <select id="callProcedure" parameterType="map" statementType="CALLABLE" > { call prg_add( #{p1,mode=IN,jdbcType=NUMERIC}, <!--参数一--> #{p2,mode=IN,jdbcType=NUMERIC}, <!--参数二--> #{p3,mode=OUT,jdbcType=NUMERIC} <!--输出参数--> ) } </select>
service:
//调用存储过程 public static void main(String[] args) throws IOException { SqlSession session=getSession(); CallMapper cm=session.getMapper(CallMapper.class); Map map=new HashMap(); map.put("p1", 100); map.put("p2", 200);
map.put("p3", null);cm.callProcedure(map); System. out.println(map. get( " p3 " )); }
jdbc 调用存储过程
-
public void testProcedure(){
-
-
String sql = "{call selectUserById(?,?,?,?)}";
-
-
Connection conn = null;
-
CallableStatement call = null;
-
try {
-
//得到一个数据库连接
-
conn = JDBCUtils.getConnection();
-
//通过连接创建出statement
-
call = conn.prepareCall(sql);
-
//对于in参数,赋值
-
call.setInt( 1, 2); // (第几个问号,要赋的值)
-
//对out参数,声明
-
call.registerOutParameter( 2, OracleTypes.VARCHAR); //(第几个问号,声明的类型)
-
call.registerOutParameter( 3, OracleTypes.NUMBER);
-
call.registerOutParameter( 4, OracleTypes.CHAR);
-
-
//执行调用
-
call.execute();
-
-
//取出结果
-
String userName = call.getString( 2);
-
int userAge = call.getInt( 3);
-
String userSex = call.getString( 4);
-
-
System.out.println( "用户姓名:"+userName+ "\n\t年龄:"+userAge+ "\n\t性别:"+userSex);
-
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally{
-
//关闭连接,释放资源
-
JDBCUtils.release(conn, call, null);
-
}
-
-
}
返回结果集
-
-
import java.sql.CallableStatement;
-
import java.sql.Connection;
-
import java.sql.ResultSet;
-
-
import org.junit.Test;
-
-
import oracle.jdbc.internal.OracleCallableStatement;
-
import oracle.jdbc.internal.OracleTypes;
-
-
public void testCursor(){
-
String sql = "{call Mypackage.queryUserList(?,?) }";
-
-
Connection conn = null;
-
CallableStatement call = null;
-
ResultSet rs = null;
-
try {
-
//得到数据库连接
-
conn = JDBCUtils.getConnection();
-
//通过数据库连接创建statement
-
call = conn.prepareCall(sql);
-
-
//对于输入参数,赋值
-
call.setInt( 1, 1);
-
//对于输出参数,声明
-
call.registerOutParameter( 2, OracleTypes.CURSOR);
-
//执行调用
-
call.execute();
-
//将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet
-
rs = ((OracleCallableStatement)call).getCursor( 2);
-
//遍历 ResultSet
-
while (rs.next()) {
-
//根据类型和列名取值
-
int id = rs.getInt( "user_id"); //括号内为 列名
-
String user_name = rs.getString( "user_name");
-
int age = rs.getInt( "user_age");
-
String sex = rs.getString( "user_sex");
-
System.out.println( "查询到的用户信息:\n\tid:"+id+ "\n\t姓名:"+user_name
-
+ "\n\t年龄:"+age+ "\n\t性别:"+sex);
-
}
-
-
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally{
-
JDBCUtils.release(conn, call, rs);
-
}
-
}
- CallableStatement c=conn.prepareCall("{call delePro(?)}"); //删除的存储过程
- c.setInt(1,1);
- c.execute();
- c=conn.prepareCall("{call selePro}"); //查询的存储过程
- ResultSet rs=c.executeQuery();
- while(rs.next())
- {
- String Stu=rs.getString("StuID");
- String name=rs.getString("StuName");
- String add=rs.getString("StuAddress");
- System.out.println ("学号:"+" "+"姓名:"+" "+"地址");
- System.out.println (Stu+" "+name+" "+add);
- }
- c.close();
- }
- }