1. 程式人生 > >JDBC部分總結(一)

JDBC部分總結(一)

JDBC的工作過程

        1.載入驅動,建立連線。

        2.建立語句物件。

        3.執行SQL語句。

        4.處理結果集。

        5.關閉連線。    

驅動類載入方式        

        Oracle:Class.forName(“oracle.jdbc.OracleDriver”);

        Mysql:Class.forName(“com.mysql.jdbc.Driver”);

建立連線

     Oracle:Connection con=DriverManager.getConnection(

            “jdbc:oracle:thin:@<主機名>:<埠號(預設1521)>:<例項名>”,

            ”帳號”,

            ”密碼”);

     Mysql:Connection con=DriverManager.getConnection(

            “jdbc:mysql://<主機名>:<埠號(預設3306)>/<資料庫名>”,

            ”帳號”,

            ”密碼”);

建立語句物件

        PrepareStatement ps=con.prepareStatement(sql);

執行Sql查詢語句並回結果集

        ResultSet result=ps.executeQuery();

執行Sql插入,更新操作並返回執行後影響的記錄數

        Int flag=ps.executeUpdate();

處理結果集

        while(result.next()){

            result.get...(列名)

        }

關閉連線

        if(rs!=null){

            rs.close();

        }

        if(statement!=null){

            statement.close();

        }

        if(con!=null){

            con.close();

        }

連線池

    預先建立並封裝一些連線物件並將其快取起來,當需要使用連線物件時可以向連線池“借”一個連線,用完之後將其“歸還”到連線池中。

為什麼用連線池?

        每一次資料操作請求都需要建立資料庫連線,開啟連線,存取資料和關閉連線等步驟,而這些步驟耗資源又費時,如果頻繁發生資料庫操作,勢必會使系統性能下降。

    示例:查詢職工資訊(EMP表)

    

    首先建立一個db.properties檔案,裡面配置一些資料庫資訊和連線池資訊。

#資料庫驅動
jdbc.driver=com.mysql.jdbc.Driver
#資料庫連線地址
jdbc.url=jdbc:mysql://localhost:3306/test
#資料庫使用者名稱
jdbc.user=root
#資料庫密碼
jdbc.pwd=123456

#初始化連線數
dataSource.initialSize=10
#最大空閒數連線數
dataSource.maxIdle=20
#最小空閒連線數
dataSource.minIdle=5
#最大連線數量
dataSource.maxActive=50
#超時等待時間(單位毫秒)
dataSource.maxWait=1000

建立一個DBUtil類,其中封裝了獲取資料庫連線和關閉資料庫連線

public class DBUtil {
	//初始化連線池
	private static BasicDataSource basicDataSource=new BasicDataSource();
	//初始化properties物件
	private static Properties properties=new Properties();
	//設定資料庫和連線池變數
	private static String driver;
	private static String url;
	private static String user;
	private static String pwd;
	private static String initialSize;
	private static String maxIdle;
	private static String minIdle;
	private static String maxActive;
	private static String maxWait;
	static{
		try {
			//獲取資料庫連線資訊
			properties.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
			driver=properties.getProperty("jdbc.driver");
			url=properties.getProperty("jdbc.url");
			user=properties.getProperty("jdbc.user");
			pwd=properties.getProperty("jdbc.pwd");
			//獲取連線池資訊
			initialSize=properties.getProperty("dataSource.initialSize");
			maxIdle=properties.getProperty("dataSource.maxIdle");
			minIdle=properties.getProperty("dataSource.maxIdle");
			maxActive=properties.getProperty("dataSource.maxIdle");
			maxWait=properties.getProperty("dataSource.maxWait");
			//設定連線池
			basicDataSource.setDriverClassName(driver);
			basicDataSource.setUrl(url);
			basicDataSource.setUsername(user);
			basicDataSource.setPassword(pwd);
			basicDataSource.setInitialSize(Integer.parseInt(initialSize));
			basicDataSource.setMinIdle(Integer.parseInt(minIdle));
			basicDataSource.setMaxIdle(Integer.parseInt(maxIdle));
			basicDataSource.setMaxActive(Integer.parseInt(maxActive));
			basicDataSource.setMaxWait(Integer.parseInt(maxWait));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//從連線池獲取連線
	public static Connection getConnection() throws SQLException{
		Connection con=basicDataSource.getConnection();
		return con;
	}
	//關閉連線
	public static void closeConnection(Connection con,Statement statement,ResultSet rs) throws SQLException{
		if(rs!=null){
			rs.close();
		}
		if(statement!=null){
			statement.close();
		}
		if(con!=null){
			con.close();
		}
	}
}

    接著一個測試類

public class PrintEmp {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//建立連線
		Connection con=DBUtil.getConnection();
		//建立SQL語句
		String sql="select * from emp";
		//建立語句物件
		PreparedStatement ps=con.prepareStatement(sql);
		//執行sql語句
		ResultSet rs=ps.executeQuery();
		//遍歷結果集
		while(rs.next()){
			int empno=rs.getInt("empno");
			String ename=rs.getString("ename");
			double sal=rs.getDouble("sal");
			Date date=rs.getDate("hiredate");
			System.out.println("empno "+empno+",ename "+ename+",sal "+sal+",date "+date);
		}
		//關閉資料庫連線
		DBUtil.closeConnection(con, ps, rs);	
	}
}

    測試結果

   其中需要的jar包地址:

  連結: https://pan.baidu.com/s/1jo8O57s0H_MnB_owafMoEQ 密碼: edxe

相關推薦

JDBC部分總結

JDBC的工作過程         1.載入驅動,建立連線。         2.建立語句物件。         3.執行SQL語句。         4.處理結果集。         5.關閉連線。     驅動類載入方式                 Or

原生jdbc問題總結

資料庫連線,使用的時候就建立,不使用立即釋放,對資料庫進行頻繁連線開啟和關閉,造成資料庫資源浪費,影響資料庫效能。 將sql語句硬編碼到java程式碼中,如果sql語句修改需要重新編譯java程式碼,不利於系統維護。 向prepareStatement中設定引數,對佔位符

JDBC技術總結

1. JDBC簡介        SUN公司為了簡化、統一對資料庫的操作,定義了一套java操作資料庫的規範,稱之為JDBC,JDBC不能直接操作資料庫,JDBC通過介面載入資料庫的驅動,然後操作資料庫。JDBC:Java Data Base Connectivity,它主要由介面組成。組成JDBC的2個包

初學JDBC的一些總結

1、關於JDBC的的個人理解:   JDBC(Java Data Base Connectivity,java 資料庫連線)是用於執行 SQL 語句的 JavaAPI,可以為多種關係型資料庫提供統一的訪問方式,它由一組用 Java 語言編寫的類和介面組成。JDBC 提供了一種基準,據此可以構建更高階的工具和

手機射頻測試分析與總結——GPS部分

剛入行的時候手機還是以2G的feature phone為主,兩三年的時間已經是3G smartphone的天下了。2G就是GSM+EDGE(就不分2.5G或者2.75G了),3G包含CDMA,WCDMA,TD-SCDMA,此外就是BT/FM這樣的標配,目前FM在很多專案

Linux-網絡部分總結概念

cep 超時 數據鏈路 oca 局限 次數 and address int Linux-網絡部分總結(一概念) 計算機網絡 ,通internet鏈接各級用戶。 多種網絡服務為用戶提供不同服務、例如ftp、web、tftp等網絡的搭建由各種網絡拓撲來提高網速,容錯等

java_web項目開發經驗總結

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

文檔總結——文檔的概述

理解 需要 軟件需求 是否 研究 strong 開發項目 問題 項目開發 寫完文檔後,本來想寫一篇具體的文檔的總結的,後來看大家都寫的具體文檔總結,於是我就想:我還是寫一些跟大家不一樣的東西吧。 所以,我就說說我對各個文檔的宏觀理解吧。

salesforce零基礎學習七十二項目中的零碎知識點小總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

OpenGL在MFC中的使用總結——基本框架

palette 接受 white 要求 無效 結構 del 一次 是你 項目中要畫3D顯示的模型,於是要用到OpenGL,加上是在MFC中,並且是在MFC中的ActiveX中使用。再並且鑒於他們程序主框架的設定。常規的方法還不一定能實現。所以還是查過不少資料,在此一一總

操作系統基礎知識總結

一個 快速 會有 處理死鎖 b2c fcm 死鎖 空間 存儲系統 1. 進程和線程的區別 進程 進程,即正在運行的程序,程序從硬盤載入到內存就變成進程。進程是資源的擁有者,每個進程都擁有著自己的內存空間與多個線程。 線程 線程是指令的執行者,是計算機執行指令的基本單元,一個

react native 知識點總結

修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v

SEO總結

.com http 分享 com ima 技術 wid -1 ges SEO總結(一)

js基本語法總結

向上取整 取余 轉字符串 結果 lin ase 調試 錯誤 進行 1.js簡介 a)js是一種網頁腳本語言,使得瀏覽器可以與網頁互動。 js的一種基於對象和事件驅動,具有安全性能的腳本語言,腳本語言就是在客戶端的瀏覽器就可以互動響應處理程序的語言,而不需要服務器的處理和響應

JSON必知必會學習總結

tor lint 沒有 script app 對數 數據交換格式 object 什麽 七月第一周,從學校畢業回來上班的第一周。離開一段時候後,再次回來重新工作,有了很多新的認識,不再是實習時那麽混混沌沌了。每天我自己該做什麽,怎麽做,做到什麽程度更清晰了。除了要去完成我負責

PHP學習總結

encode 什麽 code 解決 new span att 面向對象 反斜杠 》PHP 面向對象 使用parent訪問父類的構造方法(__construct)時一定要為當前類繼承要訪問的構造方法 類的構造方法(__construct)在實例化時直接被加載,靜態方法

python初步——基礎總結

python 自動化運維一. 第一個HelloWorld 1. 在linux 執行 (python2.7)[[email protected]/* */ ~]# vim test.py #!/usr/bin/env python

Java IO學習總結

file flush writer directory 創建 str java 資源 tab 一、File 類 Java中不管文件還是目錄都可以使用File類操作,File能新建、刪除、重命名文件和目錄,但是不能訪問文件內容本身,訪問文件內容需要使用輸入輸出流。 Fi

mybatis總結

tran default led sqlserver insert cto src 結果集 obj MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用

SSF項目總結

變更 可能 檢測 說服力 結果 項目 總結 實時監控 毫無 作為項目經理,在把握需求變更上需要有高度的敏感,作為一個檢測器,實時監控,項目過程中與客戶方溝通的任何細小的變更,都應該記錄在案,同時 抄送給客戶方,註意這裏抄送給客戶方一定要做,目前項目上吃虧的地方有: 1,有的