自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java JDBC編程總結(jié)

開發(fā) 后端
JDBC是JAVA操作數(shù)據(jù)庫的基本技術(shù),并不是唯一技術(shù)。本文將對Java JDBC編程進(jìn)行總結(jié),希望能對大家有所幫助。

Hibernate、TopLink等OR Mapping操作數(shù)據(jù)庫的技術(shù)都是建立JDBC技術(shù)之上的,實際來說,他們的性能和JDBC是有很大差距的,但反過來說,如果JDBC用不好,還不如hibernate呢。暫且不說這些孰優(yōu)孰劣的話了,再次主要是對Java的基礎(chǔ)技術(shù)做個總結(jié),以加深認(rèn)識。

一、JDBC的基本原理

JDBC是Java操作數(shù)據(jù)庫的技術(shù)規(guī)范。他實際上定義了一組標(biāo)準(zhǔn)的操作數(shù)據(jù)庫的接口。為了能讓Java操作數(shù)據(jù)庫,必須要有實現(xiàn)了JDBC這些接口的類,不同的數(shù)據(jù)庫廠商為了讓Java語言能操作自己的數(shù)據(jù)庫,都提供了對JDBC接口的實現(xiàn)--這些實現(xiàn)了JDBC接口的類打成一個jar包,就是我們平時看到的數(shù)據(jù)庫驅(qū)動。由于不同的數(shù)據(jù)庫操作數(shù)據(jù)的機制不一樣,因此JDBC的具體實現(xiàn)也就千差萬別,但是你作為java程序員,你只和Java JDBC的接口打交到,才不用理會他們怎么實現(xiàn)的!呵呵,現(xiàn)在知道JDBC驅(qū)動是怎么回事了。當(dāng)然,這些類可以自己去寫--如果你很牛!

二、JDBC編程的步驟

為了說明這個步驟,假設(shè)你要通過java程序執(zhí)行一個sql查詢,你需要按照如下的步驟去走:

1、創(chuàng)建指定數(shù)據(jù)庫的URL

這個URL實際上還是統(tǒng)一資源定位器,里面包含了一些連接數(shù)據(jù)庫的信息:數(shù)據(jù)庫類型、端口、驅(qū)動類型、連接方式、數(shù)據(jù)庫服務(wù)器的ip(或名字)、數(shù)據(jù)庫名(有的是別名)等。其格式如下:

jdbc:subProtocol:subName://DBserverIP:port/DatabaseName
例如mysql的一個url:jdbc:mysql://192.168.3.143:3306/zfvims

2、加載驅(qū)動類到JVM內(nèi)存區(qū)域中

有兩種方法:

一種是用Class.forName()方法加載指定的驅(qū)動程序。

一種是將驅(qū)動程序添加到j(luò)ava.lang.System的屬性jdbc.drivers中。
最后說明一點,有時候添加到系統(tǒng)的CLASSPATH環(huán)境變量是不行的,原因是在使用JDBC接口操作數(shù)據(jù)庫前,JVM還沒有加載上驅(qū)動。

Class.forName("com.mysql.jdbc.Driver")

3、、通過DriverManager類管理驅(qū)動、創(chuàng)建數(shù)據(jù)庫連接。

DriverManager類作用于程序員和JDBC驅(qū)動程序之間,提供注冊管理驅(qū)動建立連接細(xì)節(jié)等方法,它所有成員均為靜態(tài)的。通過其getConnection方法會創(chuàng)建一個JDBC Connection對象。

Connection conn=DriverManager.registerDriver("jdbc:mysql://192.168.3.143:3306/zfvims","lavasoft","password");

4、Connection類--數(shù)據(jù)庫連接

這里所說的Connection類實際上是實現(xiàn)了JDBC的Connection接口的類,這個類一般都是jdbc驅(qū)動程序?qū)崿F(xiàn)了。Connection類表示了數(shù)據(jù)庫連接,通過其對象可以獲取一個獲取數(shù)據(jù)庫和表等數(shù)據(jù)庫對象的詳細(xì)信息。但更多的是通過這個連接更進(jìn)一步去向數(shù)據(jù)庫發(fā)送SQL語句去執(zhí)行,下面會講到。
數(shù)據(jù)庫的連接的建立是很耗費資源和時間的,因此在不用連接的情況下要通過其close()方法將連接關(guān)閉,以釋放系統(tǒng)資源。

5、Statement類--發(fā)送并執(zhí)行(靜態(tài))SQL語句

通過Connection對象的createStatement()方法可以創(chuàng)建一個Statement對象,通過該對象的方法可以(發(fā)送)并執(zhí)行一個靜態(tài)sql語句。如果要執(zhí)行動態(tài)的sql(sql串中有參數(shù)),那么就用PreparedStatement類,用法和Statement類似。

Statement stmt=con.createStatement()

6、ResultSet類--結(jié)果集

當(dāng)你執(zhí)行一條sql查詢后,就會產(chǎn)生一個查詢結(jié)果。ResultSet就表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。ResultSet 對象具有指向其當(dāng)前數(shù)據(jù)行的指針。通過ResultSet對象不但可以結(jié)果集數(shù)據(jù),還可以獲取結(jié)果集表的列名、數(shù)據(jù)類型等信息。

ResultSet rs=stmt.executeQuery(sql)

7、關(guān)閉數(shù)據(jù)庫連接

當(dāng)對sql操作完成后,應(yīng)該關(guān)閉數(shù)據(jù)庫連接,這樣避免因為連接未關(guān)閉而耗費系統(tǒng)資源,如果每次都不關(guān)閉,多次操作將建立多個連接,最終數(shù)據(jù)庫連接會達(dá)到最大限度,或者耗盡系統(tǒng)的資源,從而導(dǎo)致應(yīng)用崩潰。因此要注意關(guān)閉資源,尤其是數(shù)據(jù)庫連接。

三、JDBC編程最基本的實例

下面通過一個執(zhí)行一條簡單的MySQL查詢來說名上面的JDBC編程的一般方法和步驟。

  1. public class TestJDBC(){  
  2.     public static Connection getConnectionByJDBC() {  
  3.         Connection conn = null;  
  4.         try {  
  5.             //裝載驅(qū)動類  
  6.             Class.forName("com.mysql.jdbc.Driver");  
  7.         } catch (ClassNotFoundException e) {  
  8.             System.out.println("裝載驅(qū)動異常!");  
  9.             e.printStackTrace();  
  10.         }  
  11.         try {  
  12.             //建立JDBC連接  
  13.             conn = DriverManager.getConnection(""jdbc:mysql://192.168.3.143:3306/zfvims","lavasoft","password");  
  14.         } catch (SQLException e) {  
  15.             System.out.println("鏈接數(shù)據(jù)庫異常!");  
  16.             e.printStackTrace();  
  17.         }  
  18.         return conn;  
  19.     }  
  20.       
  21.     public static String test() {  
  22.         String sqlx = "select t.code,t.name from province t order by t.code asc";  
  23.         try {  
  24.             //創(chuàng)建一個JDBC聲明  
  25.             Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);  
  26.             //執(zhí)行查詢  
  27.             ResultSet = stmt.executeQuery(sqlx);  
  28.             while (rs.next()) {  
  29.                 String code = rs.getString("code");  
  30.                 String name = rs.getString("name");  
  31.                 System.out.println(code+name);  
  32.             }  
  33.         } catch (SQLException e) {  
  34.             System.out.println(e.getMessage());  
  35.             e.printStackTrace();  
  36.         } finally {  
  37.             //預(yù)防性關(guān)閉連接(避免異常發(fā)生時在try語句塊關(guān)閉連接沒有執(zhí)行)  
  38.             try {  
  39.                 if (conn != null) conn.close();  
  40.             } catch (SQLException e) {  
  41.                 System.out.println(e.getMessage());  
  42.                 e.printStackTrace();  
  43.             }  
  44.         }  
  45.     }     
  46.     public static void main(String args[]) {  
  47.         new TestJDBC().test();  
  48.     }     

四、JDBC編程的陷阱

1、conn一定要在finally語句塊進(jìn)行關(guān)閉。

2、Statement、ResultSet盡可能縮小其變量作用域。

3、Statement可以使用多次,定義多個。一個Statement對象只和一個ResultSet對象關(guān)聯(lián),并且是最后一次查詢。

4、ResultSet在Connection、ResultSet關(guān)閉后自動關(guān)閉。

還有很多需要寫的,以后再慢慢總結(jié)。

【編輯推薦】

  1. 在Weblogic中實現(xiàn)JDBC的功能
  2. 詳解JDBC與Hibernate區(qū)別
  3. JDBC連接MySQL數(shù)據(jù)庫關(guān)鍵四步
  4. 五步精通SQL Server 2000 JDBC驅(qū)動安裝與測試
  5. 詳解JDBC驅(qū)動的四種類型
  6. JDBC存儲過程在Oracle中的獲取結(jié)果集
責(zé)任編輯:彭凡 來源: 百度空間
相關(guān)推薦

2009-07-20 15:42:59

JDBC是什么

2009-07-14 17:01:24

JDBC基礎(chǔ)

2009-07-15 16:16:22

JDBC下載

2009-07-16 17:22:56

JDBC數(shù)據(jù)庫編程

2014-11-04 10:38:13

iOS圖形

2018-06-07 09:29:34

數(shù)據(jù)庫MySQL慢SQL

2018-11-20 10:50:00

Java性能優(yōu)化編程技巧

2013-05-23 14:25:44

JDBC

2010-01-26 17:11:13

C++編程

2018-05-21 09:55:09

Java編程技巧

2012-05-18 10:36:20

CC++編程

2010-02-23 16:32:14

Python編程

2009-11-09 10:43:51

WCF Web編程模型

2022-08-01 10:11:24

Bash編程易錯代碼

2010-03-01 17:01:03

Python編程技巧

2009-11-10 13:08:13

VB.NET編程技巧

2009-07-16 13:51:43

2009-07-22 15:58:34

JDBC調(diào)用Oracl

2010-04-13 10:32:40

Oracle數(shù)據(jù)庫編程

2010-03-10 16:52:00

Python 編程語言
點贊
收藏

51CTO技術(shù)棧公眾號