jdbc調用存儲過程


JDBC調用存儲過程

通用JDBC連接類(簡版)

package com.qy.dbUtil;

import java.io.IOException;
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;

public class JDBCUtil {
    private static String driver=null;
    private static String url=null;
    private static String username=null;
    private static String password=null;
    
    static{
        try {
            InputStream is= JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");  
            Properties properties = new Properties();
            properties.load(is);
            driver = properties.getProperty("driver").toString();
            url= properties.get("url").toString();
            username= properties.get("username").toString();
            password= properties.get("password").toString();
            Class.forName(driver);
        } catch (IOException e) {
            System.out.println("db.properties文件流加載失敗");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("com.mysql.jdbc.Driver加載類不存在");
            e.printStackTrace();
        }
        
    }
    
    /**
     * 獲取Connection連接
     * @return Connection
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
            Connection con = DriverManager.getConnection(url, username, password);
            System.out.println("JDBC鏈接成功");
            return con;
    }
    
    /**
     * 釋放連接
     * @param con
     * @param st
     * @param rs
     */
    public static void release(Connection con,Statement st,ResultSet rs) {
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                System.out.println("ResultSet關閉異常");
                e.printStackTrace();
            }
        }
        if (st!=null) {
            try {
                st.close();
            } catch (SQLException e) {
                System.out.println("Statement關閉異常");
                e.printStackTrace();
            }
        }
        if (con!=null) {
            try {
                con.close();
            } catch (SQLException e) {
                System.out.println("Connection關閉異常");
                e.printStackTrace();
            }
        }
        System.out.println("關閉成功");
    }
    
    /**
     * 測試連接
     * TODO
     * @param args
     */
    public static void main(String[] args) {
        try {
            Connection con = getConnection();
            release(con, null, null);
        } catch (SQLException e) {
            System.out.println("Connection連接異常");
            e.printStackTrace();
        }
    }
}

jdbc調用存儲過程

    public static void main(String[] args) throws SQLException {
        Connection con = JDBCUtil.getConnection(); /*獲取連接*/
        /*調用sql語句*/
        //PreparedStatement  cs = con.prepareStatement("insert into lobtable(id,resum,clob) values(?,?,?)");
        /*調用存儲過程*/
        CallableStatement cs = con.prepareCall("{call proName(?,?,?,?)}");
        cs.setObject(1, "id1");   //為存儲過程設置參數
        cs.setObject(2, "resum2");
        cs.setObject(3, "clob3");
        cs.execute();  //執行存儲過程
        JDBCUtil.release(con, cs, null);  /*釋放連接*/
    }

JdbcTemplate調用存儲過程

涉及內容:org.springframework.jdbc.core.JdbcTemplate、proxool-0.9.1.jar

在web.xml配置springConfig.xml和jdbcproxool.xml路徑

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springConfig.xml</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <servlet>
        <servlet-name>proxoolServletConfigurator</servlet-name>
        <servlet-class>
            org.logicalcobwebs.proxool.configuration.ServletConfigurator
        </servlet-class>
        <init-param>
            <param-name>xmlFile</param-name>
            <param-value>WEB-INF/classes/jdbcproxool.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

jdbcproxool.xml

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
   <proxool>
       <alias>demodb</alias>
       <driver-url>jdbc:mysql://127.0.0.1:3306/demo?useUnicode\=true&amp;characterEncoding\=UTF-8</driver-url>
       <driver-class>com.mysql.jdbc.Driver</driver-class>
       <driver-properties>
           <property name="user" value="root"/>
           <property name="password" value="root"/>
       </driver-properties>
       <minimum-connection-count>10</minimum-connection-count>
       <!--連接池中可用的連接數量,空閑連接數小於此值時會新建連接-->
       <prototype-count>20</prototype-count>
       <maximum-connection-count>60</maximum-connection-count>
       <!--house keeper保留線程處於睡眠狀態的最長時間,自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
       <house-keeping-sleep-time>60000</house-keeping-sleep-time>
       <!-- 一次建立的最大連接數,默認是10-->
       <simultaneous-build-throttle>20</simultaneous-build-throttle>
       <!--在分配連接前后是否進行有效性測試,這個是解決本問題的關鍵 -->
       <test-before-use>true</test-before-use>
       <!--用於測試的SQL語句一定要寫-->
       <house-keeping-test-sql>select now()</house-keeping-test-sql>
       <!--允許proxool實現被代理的PreparedStatement 對象方法-->
       <injectable-prepared-statement-interface>java.sql.PreparedStatement</injectable-prepared-statement-interface>
   </proxool>
</something-else-entirely>

springConfig.xml

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"/>
        <property name="url" value="proxool.demodb"/>
    </bean>
    
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

java調用

@Repository("commonDao")
public class CommonDao {
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
/** * 調用存儲過程(無返回值) * TODO * @param procedureName 存儲過程名 * @param paramList 參數列表 */ public void callProcedure(String procedureName, List paramList) { String callProcedureString = "call " + procedureName + "("; if (paramList != null && paramList.size() > 0) { String paramString = ""; for (int i = 0; i < paramList.size(); i++) { paramString += "'" + paramList.get(i) + "'"; if (i < paramList.size() - 1) { paramString += ","; } } callProcedureString += paramString; } callProcedureString = callProcedureString + ")"; this.jdbcTemplate.execute(callProcedureString); }
public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM