單例模式和JDBC

配置文件:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/blog
user=root
user=1234

properties文件裏面一般存放的是Map,也就是鍵值對。

單例模式,是一種經常使用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。經過單例模式能夠保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例java

 

話說JDBC

Java經過JDBC鏈接數據庫分爲如下四步:
1.加載驅動
2.創建鏈接
3.使用Preparedstatement進行預編譯或者使用statement對象
4.釋放資源


Preparedstatement和Statement的比較:
a.首先Preparedstatement是預編譯的,而Statement反之。
b.Preparedstatement支持批量處理,而Statement不行。
c.Preparedstatement相對於Statement可讀性上良好
d.不管從哪一個方面看Preparedstatement都比Statement要好(不相信的話能夠本身寫一個
小的圖書管理系統或則其它的小項目均可以,一個用Preparedstatement一個用Statement進行對比
就知道了)

 


/**
單例模式
*/
package
com.utils; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class ConfigManager { /**之因此定義爲靜態的是由於靜態修飾可直接調用,不須要實例化,直接類名.方法名便可調用 */ private static ConfigManager config; private static Properties props; private ConfigManager(){ props=new Properties(); } public static ConfigManager getInstance(){ if(config==null){ config=new ConfigManager(); } return config; } public static String getPropertis(String key){ try { FileInputStream fis=new FileInputStream("src/db.properties"); props.load(fis); return props.getProperty(key); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } }

 

經過JDBC和數據庫打交道mysql

/**
 * JDBC鏈接數據庫
 */


package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.utils.ConfigManager;

public class BaseDao {
    
    Connection conn=null;
    PreparedStatement ps=null;
    ResultSet rs=null;
    //與數據庫創建鏈接
    public boolean getConnection(){
        String driver=ConfigManager.getInstance().getPropertis("driver");
        String url=ConfigManager.getInstance().getPropertis("url");
        String user=ConfigManager.getInstance().getPropertis("user");
        String password=ConfigManager.getInstance().getPropertis("password");
        try {
       //加載驅動 Class.forName(driver);
       //創建鏈接 conn
=DriverManager.getConnection(url,user,password); return true; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } //全部查詢方法的模板 public ResultSet select(String sql,Object[]obj){ getConnection(); try {
//使用Preparedstatement對象預編譯sql ps
=conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { ps.setObject(i+1,obj[i]); } rs=ps.executeQuery(); return rs; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } //全部增刪改方法的模板 public int update(String sql,Object[]obj){ getConnection(); try { ps=conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { ps.setObject(i+1,obj[i]); } int lines=ps.executeUpdate(); return lines; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; } } //釋放資源 public boolean close(){ try { if(!rs.isClosed()){ rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } try { if(!ps.isClosed()){ ps.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } try { if(!conn.isClosed()){ conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return true; } }
相關文章
相關標籤/搜索