package com.itheima.procedure; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Types; import org.junit.Test; import com.itheima.utils.JdbcUtil; /** * 执行存储过程 用CallableStatement 得到它的对象 st = con.prepareCall(sql); * 调用 格式: * {call 过程名(?,?)} * @author wangli * */ public class ProcedureTest { @Test public void testProcedure(){ Connection con = null; CallableStatement st =null;//是pstatement 的子类,预编译sql 防注入,不过不能批量处理不同类的sql语句。 try { con = JdbcUtil.getConnection(); st = con.prepareCall("{call demoSp(?,?)}");//获取CallableStatement 对象 //两个参数赋值 st.setString(1, "cgx");//输入参数赋值 //对于过程的输出参数要先注册 Types:java.sql.Types代表的是sql的相应数据类型 st.registerOutParameter(2, Types.VARCHAR); //执行存储过程 st.execute(); String result = st.getString(2);//调用存储过程后,返回的输出参数的值 System.out.println(result); } catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtil.release(null, st, con); } } }
package com.itheima.utils; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * 用于读取配置文件,并获取连接,关闭连接 * @author wangli * */ public class JdbcUtil { private static String DRIVER; private static String URL; private static String USER; private static String PASSWORD; //1.读取配置文件 只要读一次就可以 static{ try { //ClassLoader默认读取classes文件夹下的资源 InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbccfg.properties"); //2.生成Properties对象 Properties p = new Properties(); p.load(is); //给属性赋值 DRIVER=p.getProperty("driver"); URL = p.getProperty("url"); USER = p.getProperty("user"); PASSWORD = p.getProperty("password"); //加载驱动 Class.forName(DRIVER); } catch (Exception e) { e.printStackTrace(); } } /** * 获取数据库连接 * @return * @throws Exception */ public static Connection getConnection() throws Exception{ return DriverManager.getConnection(URL, USER,PASSWORD); } /** * 关闭资源 * @param rs * @param st * @param con */ public static void release(ResultSet rs,Statement st,Connection con ){ try { if(rs!=null){ rs.close(); rs=null;//目的是让回收器立即进行垃圾回收 } } catch (SQLException e) { e.printStackTrace(); } try { if(st!=null){ st.close(); st=null; } } catch (SQLException e) { e.printStackTrace(); } try { if(con!=null){ con.close(); con=null; } } catch (SQLException e) { e.printStackTrace(); } } }
配置文件信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day16
user=root
password=root