預編譯sql

package JDBC;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

/*
* 改進DBUtil,使得connection不需要傳參
* */
public class DBUtil2 {
    //數據庫驅動
    private static String driver;
    //連接數據庫的路徑
    private static String url;
    //連接數據庫的用戶名
    private static String user;
    //連接數據庫的密碼
    private static String pwd;
    //用於管理不同線程所獲取的連接
    private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

    //靜態塊:類被虛擬機加載時執行一次
    static {
        try {
            //讀取配置文件
            Properties properties = new Properties();

            //更加推薦的相對路徑寫法
            InputStream inputStream = JDBCDemon4.class.getClassLoader()
                    .getResourceAsStream("JDBC/config.properties");
            properties.load(inputStream);
            driver = properties.getProperty("driver").trim();
            url = properties.getProperty("url").trim();
            pwd = properties.getProperty("pwd").trim();
            user = properties.getProperty("user").trim();
//            System.out.println("Driver:" + driver);
//            System.out.println("user:" + user);
//            System.out.println("url:" + url);
//            System.out.println("pwd:" + pwd);
            inputStream.close();
            //獲取驅動
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 獲取一個連接
     */
    public static Connection getConnection() throws Exception{
        try {
            /*
             * 通過DriverManager創建一個數據庫連接並返回
             * */
            Connection connection =  DriverManager.getConnection(url,user,pwd);
            /*
             * ThreadLocal的set方法會將當前線程作爲key
             * 並將給定的值作爲value存入內部的map中保存
             * */
            threadLocal.set(connection);
            return connection;
        } catch (Exception e) {
            e.printStackTrace();
            //通知調用者,創建連接出錯
            throw e;
        }
    }

    /**
     *  關閉給定的連接
     */
    public static void closeConnection(){
        try{
            //在ThreadLocal中獲取connection即(value值)
            Connection connection = threadLocal.get();
            if(connection != null){
                connection.close();
                //刪除value值,防止污染
                threadLocal.remove();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

package JDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;

/**
 * Statment主要用於執行靜態的sql語句,,內容不變的sql,每執行一次都要對sql語句進行編譯
 *
 *  sql語句中只是其中參數有所不同,則適用於preparedStament,sql語句提前編譯
 *  繼承與Statment,其中execute,executeQuery,executeUpdate被更改,不需要參數
 * */

//使用預編譯sql提高執行效率
public class JDBCPreSta1 {
    public static void main(String[] args) {
        try{
            //建立連接
            Connection connection = DBUtil2.getConnection();
 /*
 * 使用preparedAtatment,預編譯sql
 * */
//            String sql = "insert into user_demon values (?,?,'123456',?,?)";
//            //System.out.println(sql);
//            PreparedStatement preparedStatement = connection.prepareStatement(sql);
//            //記錄開始時間
//            long start = System.currentTimeMillis();
//            for(int i = 2000;i < 2100;i++){
//                preparedStatement.setInt(1,i);
//                preparedStatement.setString(2,"test"+i);
//                preparedStatement.setInt(3,5000);
//                preparedStatement.setString(4,"test"+i+"qq.com");
//                preparedStatement.executeUpdate();
//            }
//            //結束時間
//            long end = System.currentTimeMillis();
//            //輸出插入完畢總耗時
//            System.out.println("執行完畢,耗時:"+(end - start) +"秒");


/*
* 使用Statment未經過預編譯的sql
* */
            //獲取Statment
            Statement statement = connection.createStatement();
            long start = System.currentTimeMillis();
            for(int i = 3000;i <3100;i++){
                //String sql = "insert into user_demon values(1,'test"+i+"','12345',5000,'test"+i+"@qq.com')";
                String sql ="insert into user_demon " +
                        "values " +
                        "("+i+","+
                        "'test"+i+"',"+
                        "'12345',"+
                        "5000,"+
                        "'test"+i+"@qq.com'" +
                        ")";
                statement.executeUpdate(sql);
            }
            long end = System.currentTimeMillis();
            System.out.println("執行完畢,耗時:"+(end - start) +"秒");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil2.closeConnection();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章