程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JDBC連接池以及動態SQL處理,jdbc動態sql

JDBC連接池以及動態SQL處理,jdbc動態sql

編輯:JAVA綜合教程

JDBC連接池以及動態SQL處理,jdbc動態sql


復習一下:

1.先創建一個properties配置文件

ClasssName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@服務器IP:端口號:名稱
user=設置的用戶名
password=設置的密碼
maxActive=最大連接數量
maxWait=最大等待時間

2.加載讀取配置文件

package day02;

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/** * 該類用於管理數據庫連接 * @author adminitartor * */ public class DBUtil { //數據庫連接池 private static BasicDataSource ds;

static{

    Properties prop = new Properties();
    try {
        prop.load(new FileInputStream("config.properties"));
        String className = prop.getProperty("classname");
        String url = prop.getProperty("url");
        String username = prop.getProperty("username");
        String password = prop.getProperty("password");
        int maxActive = Integer.parseInt(prop.getProperty("maxactive"));
        int maxWait = Integer.parseInt(prop.getProperty("maxwait"));
        //初始化連接池
        ds = new BasicDataSource();
        //將JDBC建立連接所需要的信息設置到連接池中

        //Class.forName(...)
        ds.setDriverClassName(className);

        //DriverManager.getConnection(...)
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);

        //設置連接池最大連接數
        ds.setMaxActive(maxActive);
        //設置最大等待時間
        ds.setMaxWait(maxWait);


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


}
/**
 * 獲取數據庫連接
 * @return
 */
public static Connection getConnection() 
                          throws Exception{

    return ds.getConnection();
}
/**
 * 關閉給定的連接
 * @param conn
 */
public static void closeConnection(Connection conn){
    try {

        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

3.處理動態的SQL

java.sql.PreparedStatement  該接口是Statement的子接口。設計目的是為了執行動態SQL語句。這樣的SQL稱為預編譯SQL,這種SQL語句會將動態信息以"?"代替,先進行占位。然後將該SQL發送給數據庫生成執行計劃。然後當需要執行該SQL時,只需要將?需要的實際數據再次傳遞給數據庫即可。
* 1:由於先將SQL語句發送給數據庫,並生成了執行計劃(語義已經確定),就不存在拼接SQL導致改變SQL語義(SQL注入攻擊)的問題了。
* 2:由於執行計劃已經生成,當大批量執行SQL時每次只需要將?表示的實際值傳入,那麼數據庫會重用執行計劃,這就減少了服務器的壓力。

    Connection conn = null;
    try {
        conn = DBUtil.getConnection();

   //使用PreparedStatement
  String sql = "INSERT INTO userinfo "
  + "(id,username,password,email,nickname,account) "
  + "VALUES "
  + "(seq_userinfo_id.NEXTVAL,?,?,?,?,?)";
  PreparedStatement ps
  = conn.prepareStatement(sql);

  ps.setString(1, "liucan");
  ps.setString(2, "123456");

  ps.setString(3, "[email protected]");
  ps.setString(4, "hello");
  ps.setDouble(5, 5000.0);

  int d = ps.executeUpdate();
  if(d>0){
  System.out.println("插入成功!");
  }

    } catch (Exception e) {
        e.printStackTrace();
    } finally{
        if(conn != null){
            DBUtil.closeConnection(conn);
        }
    }
}`      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved