存储过程 jdbc

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

posted @ 2015-12-24 15:28  白金05  阅读(142)  评论(0)    收藏  举报