溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用JDBC連接數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-07-14 15:24:23 來(lái)源:億速云 閱讀:280 作者:chen 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“如何使用JDBC連接數(shù)據(jù)庫(kù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何使用JDBC連接數(shù)據(jù)庫(kù)”吧!

據(jù)估算,將近一半的軟件開發(fā)都要涉及客戶(機(jī))/服務(wù)器方面的操作。Java為自己保證的一項(xiàng)出色能力就是構(gòu)建與平臺(tái)無(wú)關(guān)的客戶機(jī)/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用。在Java 1.1中,這一保證通過(guò)Java數(shù)據(jù)庫(kù)連接(JDBC)實(shí)現(xiàn)了。

數(shù)據(jù)庫(kù)最主要的一個(gè)問(wèn)題就是各家公司之間的規(guī)格大戰(zhàn)。確實(shí)存在一種“標(biāo)準(zhǔn)”數(shù)據(jù)庫(kù)語(yǔ)言,即“結(jié)構(gòu)查詢語(yǔ)言”(SQL-92),但通常都必須確切知道自己要和哪家數(shù)據(jù)庫(kù)公司打交道,否則極易出問(wèn)題,盡管存在所謂的“標(biāo)準(zhǔn)”。JDBC是面向“與平臺(tái)無(wú)關(guān)”設(shè)計(jì)的,所以在編程的時(shí)候不必關(guān)心自己要使用的是什么數(shù)據(jù)庫(kù)產(chǎn)品,只要使用JDBC連接數(shù)據(jù)庫(kù)就可以。然而,從JDBC里仍有可能發(fā)出對(duì)某些數(shù)據(jù)庫(kù)公司專用功能的調(diào)用,所以仍然不可任性妄為。

和Java中的許多API一樣,JDBC也做到了盡量的簡(jiǎn)化。我們發(fā)出的方法調(diào)用對(duì)應(yīng)于從數(shù)據(jù)庫(kù)收集數(shù)據(jù)時(shí)想當(dāng)然的做法:使用JDBC連接數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)語(yǔ)句并執(zhí)行查詢,然后處理結(jié)果集。

為實(shí)現(xiàn)這一“與平臺(tái)無(wú)關(guān)”的特點(diǎn),JDBC為我們提供了一個(gè)“驅(qū)動(dòng)程序管理器”,它能動(dòng)態(tài)維護(hù)數(shù)據(jù)庫(kù)查詢所需的所有驅(qū)動(dòng)程序?qū)ο蟆K约偃缫B接由三家公司開發(fā)的不同種類的數(shù)據(jù)庫(kù),就需要三個(gè)單獨(dú)的驅(qū)動(dòng)程序?qū)ο?。?qū)動(dòng)程序?qū)ο髸?huì)在裝載時(shí)由“驅(qū)動(dòng)程序管理器”自動(dòng)注冊(cè),并可用Class.forName()強(qiáng)行裝載。

為打開一個(gè)數(shù)據(jù)庫(kù),必須創(chuàng)建一個(gè)“數(shù)據(jù)庫(kù)URL”,它要指定下述三方面的內(nèi)容:

(1) 用“jdbc”指出要使用JDBC。

(2) “子協(xié)議”:驅(qū)動(dòng)程序的名字或者一種數(shù)據(jù)庫(kù)連接機(jī)制的名稱。由于JDBC的設(shè)計(jì)從ODBC吸收了許多靈感,所以可以選用的***種子協(xié)議就是“jdbc-odbc橋”,它用“odbc”關(guān)鍵字即可指定。

(3) 數(shù)據(jù)庫(kù)標(biāo)識(shí)符:隨使用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的不同而變化,但一般都提供了一個(gè)比較符合邏輯的名稱,由數(shù)據(jù)庫(kù)管理軟件映射(對(duì)應(yīng))到保存了數(shù)據(jù)表的一個(gè)物理目錄。為使自己的數(shù)據(jù)庫(kù)標(biāo)識(shí)符具有任何含義,必須用自己的數(shù)據(jù)庫(kù)管理軟件為自己喜歡的名字注冊(cè)(注冊(cè)的具體過(guò)程又隨運(yùn)行平臺(tái)的不同而變化)。

所有這些信息都統(tǒng)一編譯到一個(gè)字串里,即“數(shù)據(jù)庫(kù)URL”。舉個(gè)例子來(lái)說(shuō),若想通過(guò)ODBC子協(xié)議同一個(gè)標(biāo)識(shí)為“people”的數(shù)據(jù)庫(kù)連接,相應(yīng)的數(shù)據(jù)庫(kù)URL可設(shè)為:

String dbUrl = \"jdbc:odbc:people\"

如果通過(guò)一個(gè)網(wǎng)絡(luò)連接,數(shù)據(jù)庫(kù)URL也需要包含對(duì)遠(yuǎn)程機(jī)器進(jìn)行標(biāo)識(shí)的信息。

準(zhǔn)備好同數(shù)據(jù)庫(kù)連接后,可調(diào)用靜態(tài)方法DriverManager.getConnection(),將數(shù)據(jù)庫(kù)的URL以及進(jìn)入那個(gè)數(shù)據(jù)庫(kù)所需的用戶名密碼傳遞給它。得到的返回結(jié)果是一個(gè)Connection對(duì)象,利用它即可查詢和操縱數(shù)據(jù)庫(kù)。

下面是一個(gè)使用JDBC連接數(shù)據(jù)庫(kù)的例子,將打開一個(gè)聯(lián)絡(luò)信息數(shù)據(jù)庫(kù),并根據(jù)命令行提供的參數(shù)查詢一個(gè)人的姓(Last Name)。它只選擇那些有E-mail地址的人的名字,然后列印出符合查詢條件的所有人:

//: Lookup.java   // Looks up email addresses in a    // local database using JDBC   import java.sql.*;    public class Lookup {     public static void main(String[] args) {       String dbUrl = \"jdbc:odbc:people\";       String user = \"\";       String password = \"\"; [Page]      try {         // Load the driver (registers itself)         Class.forName(           \"sun.jdbc.odbc.JdbcOdbcDriver\");         Connection c = DriverManager.getConnection(           dbUrl, user, password);         Statement s = c.createStatement();         // SQL code:         ResultSet r =            s.executeQuery(             \"SELECT FIRST, LAST, EMAIL \" +             \"FROM people.csv people \" +             \"WHERE \" +             \"(LAST=’\" + args[0] + \"’) \" +             \" AND (EMAIL Is Not Null) \" +             \"ORDER BY FIRST\");         while(r.next()) {           // Capitalization doesn’t matter:           System.out.println(             r.getString(\"Last\") + \", \"              + r.getString(\"fIRST\")             + \": \" + r.getString(\"EMAIL\") );         }         s.close(); // Also closes ResultSet       } catch(Exception e) {         e.printStackTrace();       }     }   } ///:~

可以看到,數(shù)據(jù)庫(kù)URL的創(chuàng)建過(guò)程與我們前面講述的完全一樣。在該例中,數(shù)據(jù)庫(kù)未設(shè)密碼保護(hù),所以用戶名和密碼都是空串。

用DriverManager.getConnection()建好連接后,接下來(lái)可根據(jù)結(jié)果Connection對(duì)象創(chuàng)建一個(gè)Statement(語(yǔ)句)對(duì)象,這是用createStatement()方法實(shí)現(xiàn)的。根據(jù)結(jié)果Statement,我們可調(diào)用executeQuery(),向其傳遞包含了SQL-92標(biāo)準(zhǔn)SQL語(yǔ)句的一個(gè)字串(不久就會(huì)看到如何自動(dòng)創(chuàng)建這類語(yǔ)句,所以沒必要在這里知道關(guān)于SQL更多的東西)。

executeQuery()方法會(huì)返回一個(gè)ResultSet(結(jié)果集)對(duì)象,它與繼承器非常相似:next()方法將繼承器移至語(yǔ)句中的下一條記錄;如果已抵達(dá)結(jié)果集的末尾,則返回null。我們肯定能從executeQuery()返回一個(gè)ResultSet對(duì)象,即使查詢結(jié)果是個(gè)空集(也就是說(shuō),不會(huì)產(chǎn)生一個(gè)違例)。注意在試圖讀取任何記錄數(shù)據(jù)之前,都必須調(diào)用一次next()。若結(jié)果集為空,那么對(duì)next()的這個(gè)***調(diào)用就會(huì)返回false。對(duì)于結(jié)果集中的每條記錄,都可將字段名作為字串使用(當(dāng)然還有其他方法),從而選擇不同的字段。另外要注意的是字段名的大小寫是無(wú)關(guān)緊要的——SQL數(shù)據(jù)庫(kù)不在乎這個(gè)問(wèn)題。為決定返回的類型,可調(diào)用getString(),getFloat()等等。到這個(gè)時(shí)候,我們已經(jīng)用Java的原始格式得到了自己的數(shù)據(jù)庫(kù)數(shù)據(jù),這樣一個(gè)過(guò)程下來(lái)就完成了JDBC連接數(shù)據(jù)庫(kù)的任務(wù);接下去可用Java代碼做自己想做的任何事情了。

到此,相信大家對(duì)“如何使用JDBC連接數(shù)據(jù)庫(kù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI