什麼是JDBC?Java資料庫連接性簡介

2020-12-18 Java從零開始

JDBC(Java資料庫連接性)是Java API,用於管理與資料庫的連接,發出查詢和命令以及處理從資料庫獲得的結果集。JDBC在1997年作為JDK 1.1的一部分發布,是為Java持久層開發的首批組件之一。

本文提供了JDBC的概述,然後是使用JDBC API將Java客戶端與輕量級關係資料庫SQLite連接的動手入門。

JDBC如何工作

JDBC作為基於C的ODBC(開放資料庫連接)API的替代產品而開發,提供了編程級別的接口,該接口處理Java應用程式與資料庫或RDBMS通信的機制。JDBC接口包括兩層:

1. JDBC API支持Java應用程式與JDBC管理器之間的通信。

2. JDBC驅動程序支持JDBC管理器和資料庫驅動程序之間的通信。

JDBC是您的應用程式代碼與之交互的通用API。下面是您正在使用的資料庫的JDBC兼容驅動程序。

圖1是Java持久層中JDBC的體系結構概述。

使用JDBC連接資料庫

Java生態系統中編程的幸運事實之一是,您可能會為所選的任何資料庫找到穩定的JDBC資料庫連接器。在本教程中,我們將使用SQLite來了解JDBC,主要是因為它非常易於使用。

使用JDBC連接資料庫的步驟如下:

1. 安裝或找到您要訪問的資料庫。

2. 包括JDBC庫。

3. 確保所需的JDBC驅動程序在類路徑中。

4. 使用JDBC庫獲得與資料庫的連接。

5. 使用該連接來發出SQL命令。

6. 完成後關閉連接。

我們將一起完成這些步驟。

查找JDBC驅動程序

要查找您要使用的資料庫的驅動程序,只需對資料庫和JDBC進行網絡搜索。例如,輸入「 mysql jdbc driver」將打開MySQL驅動程序。我挑戰您尋找沒有JDBC驅動程序的Java兼容資料庫!

步驟1.下載並安裝SQLite

SQLite是一個非常緊湊的資料庫。它不是供生產使用的,但是快速嘗試問題的絕佳選擇。SQLite使用文件作為其功能資料庫,而無需安裝任何服務或守護程序。

要開始進行此演示,請繼續下載SQLite示例資料庫。解壓縮.db文件並將其保存在您不會忘記的地方。

該文件包含一個基於功能文件的資料庫以及我們可以使用的示例架構和數據。

SQL和JDBC

在過去的十年中,NoSQL變得越來越流行,但是關係資料庫仍然是使用中最常見的數據存儲類型。一個關係型資料庫是由列和行的表的結構化存儲庫。SQL(結構化查詢語言)是數據架構師用於在關係資料庫中創建,讀取,更新和刪除新記錄之類的語言。JDBC是從Java到SQL 的適配器層:它為Java開發人員提供了一個公共接口,用於連接資料庫,發出查詢和命令以及管理響應。

步驟2.將JDBC導入Java應用程式

我們可以在IDE中進行編碼,但是直接在文本編輯器中進行編碼將更好地展示JDBC的簡單性。首先,您需要為您的作業系統安裝兼容的JDK

假設您已安裝Java平臺開發人員工具,我們可以從創建一個簡單的Java程序開始。在您的文本編輯器中,粘貼清單1中所示的代碼。調用此文件WhatIsJdbc.java。

清單1.一個簡單的Java程序

classWhatIsJdbc{

publicstaticvoidmain(String args[]){

System.out.println("Hello JavaWorld");

}}

現在,通過輸入以下命令來編譯代碼:javac WhatIsJdbc.java。編譯將輸出WhatIsJdbc.class文件。使用以下命令從命令行執行此文件:java WhatIsJdbc。

(有關在命令行上與JDK交互的更多信息,請參見「 什麼是JDK?Java開發者工具包簡介」。)

一旦有了基本的Java程序,就可以包括JDBC庫。將清單2中的代碼粘貼到簡單Java程序的開頭。

清單2. JDBC導入

importjava.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;

這些導入中的每一個都提供對類的訪問,該類促進了標準Java資料庫連接:

· Connection 表示與資料庫的連接。

· DriverManager獲取與資料庫的連接。(另一個選項是DataSource,用於連接池。)

· SQLException 處理Java應用程式和資料庫之間的SQL錯誤。

· ResultSet並對Statement數據結果集和SQL語句建模。

我們將很快看到其中的每一個。

步驟3.將JDBC驅動程序添加到您的類路徑中

接下來,您將SQLite驅動程序添加到您的類路徑中。一個JDBC驅動程序是一個類,實現JDBC API為特定的資料庫。

從GitHub 下載SQLite驅動程序。確保獲取最新.jar文件並將其存儲在您會記得的地方。

下次執行Java程序時,將.jar通過類路徑將該文件拉入。有幾種設置類路徑的方法。清單3顯示了如何使用命令行開關來做到這一點。

清單3.在Java類路徑上執行SQLite驅動程序

java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar:. WhatIsJdbc

注意,我們將類路徑設置為指向驅動程序和本地目錄。這樣,Java仍會找到我們的類文件。

步驟4.獲得資料庫連接

現在,類路徑可以訪問驅動程序。現在,更改您的簡單Java應用程式文件,使其類似於清單4中的程序。

清單4.使用JDBC Connection類連接到SQLite

importjava.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;

classWhatIsJdbc{

publicstaticvoidmain(String[] args) {

Connectionconn = null;

try{

Stringurl = "jdbc:sqlite:path-to-db/chinook/chinook.db";

conn = DriverManager.getConnection(url);

System.out.println("Got it!");

} catch (SQLException e) {

thrownewError("Problem", e);

} finally {

try{

if(conn != null) {

conn.close();

}

} catch (SQLException ex) {

System.out.println(ex.getMessage());

}

}

}}

編譯並執行此代碼。假設一切順利,您將得到一個肯定的消息。

找不到合適的驅動程序?

如果收到類似「」的錯誤,No suitable driver found for jdbc:sqlite則需要重新訪問類路徑並確保它指向您下載的驅動程序。驅動程序連接失敗是使用JDBC的初學者最常見的絆腳石。不要流汗。修復它。

現在,我們可以使用一些SQL命令了。

步驟5.查詢資料庫

有了實時連接對象,我們可以做一些有用的事情,例如查詢資料庫。清單5顯示了如何使用JDBC Connection和Statement對象查詢SQLite 。

清單5.使用JDBC查詢資料庫

importjava.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;

classWhatIsJdbc{

publicstaticvoidmain(String[] args) {

Connectionconn = null;

try{

Stringurl = "jdbc:sqlite:path-to-db-file/chinook/chinook.db";

conn = DriverManager.getConnection(url);

Statementstmt = null;

Stringquery = "select * from albums";

try{

stmt = conn.createStatement();

ResultSetrs = stmt.executeQuery(query);

while(rs.next()) {

Stringname = rs.getString("title");

System.out.println(name);

}

} catch (SQLException e ) {

thrownewError("Problem", e);

} finally {

if(stmt != null) { stmt.close(); }

}

} catch (SQLException e) {

thrownewError("Problem", e);

} finally {

try{

if(conn != null) {

conn.close();

}

} catch (SQLException ex) {

System.out.println(ex.getMessage());

}

}

}}

在清單5中,我們使用Connection對象獲得一個Statement對象:conn.createStatement()。然後,我們使用此對象執行SQL查詢:stmt.executeQuery(query)。

該executeQuery命令返回一個ResultSet對象,然後我們用它來對進行數據迭代while (rs.next())。在此示例中,您應該看到我們查詢的專輯標題作為輸出。

請注意,我們還通過調用來關閉連接conn.close()。

與JDBC的網絡連接

清單5中的資料庫連接字符串用於本地連接:jdbc:sqlite:path-to-db-file/chinook/chinook.db。要通過網絡訪問資料庫,連接字符串將需要包括網絡URL和(通常)用於訪問資料庫的憑據。

使用JDBC做更多的事情

到目前為止,我們已經介紹了使用JDBC連接資料庫和發出SQL命令的基礎知識。雖然StatementsS和ResultSetS代表常見的場景很好地工作,你可能需要用更大或更複雜的應用程式的附加選項。幸運的是,JDBC庫不斷發展以滿足大多數資料庫訪問需求。

準備聲明

一種提高代碼靈活性的簡單方法是用替換Statement類PreparedStatement,如清單6所示。

清單6.使用JDBC PreparedStatements

StringprepState = "insert into albums values (?, ?);";

PreparedStatementprepState =

connection.prepareStatement(sql);

prepState.setString(1, "Uprising");

prepState.setString(2, "Bob Marley and the Wailers ");

introwsAffected = preparedStatement.executeUpdate();

PreparedStatement用Statement問號(?)替換的硬編碼值。使用PreparedStatements可優化代碼的重用性:a PreparedStatement僅被編譯一次,然後可以與各種參數一起重用。隨著代碼庫的增長,您只需在語句中插入新值,而不用修改字符串對象本身。

批量更新

每當應用程式要發布多個更新時,分批執行它們可以極大地提高性能。批處理的實質是獲取多個更新並將它們收集在一起,然後一次發布所有更新。清單7使用JDBC的批處理方法來執行幾個PreparedStatements 的批處理更新。

清單7.使用PreparedStatement進行批處理

prepState.setString(1, "Uprising");

prepState.setString(2, "Bob Marley and the Wailers");

preparedStatement.addBatch();

prepState.setString(1, "Wildflowers");

prepState.setString(2, "Tom Petty and the Heartbreakers");

preparedStatement.addBatch();

int[] rowsAffected = preparedStatement.executeBatch();

JDBC事務

關係資料庫中的事務允許將一組更新包裝在完全成功或失敗的交互中。通過JDBC使用事務的基礎是告訴系統關閉自動提交,然後在完成後手動告訴系統進行提交。默認情況下,自動提交功能為on,這意味著無論何時運行executeUpdate或executeInsert,命令都會被提交。

清單8顯示了JDBC事務的一小部分。

清單8. JDBC事務

connection.setAutoCommit(false);// Use executeUpdate multiple times

connection.commit();

當connection.commit()遇到,所有包裹在裡面的更新將嘗試,如果有任何失敗,他們都將被回滾。

JDBC 4.3中還有許多值得探索的功能,包括CallableStatement用於存儲過程,使用DataSource對象以提高應用程式性能(尤其是通過連接池),以及將JDBC ResultSet轉換為Java Stream

特定於資料庫的功能

儘管每個符合JDBC的資料庫都提供了相同的核心功能,以便通過SQL與資料庫連接和交互,但是某些資料庫的作用要比其他資料庫大。例如,Oracle DB提供了結果緩存,這不是JDBC規範所必需的。這是一個例子:

conn.prepareStatement ("select /*+ result_cache */ * from employees where employee_id < : 1");

結論

JDBC是Java最古老的API之一,它為Java應用程式開發的長期需求之一提供了易於使用的解決方案。僅了解本文演示的幾個JDBC調用,即可開始使用JDBC連接幾乎所有的資料庫。完成這些命令後,就可以開始探索JDBC中內置的一些更複雜的選項。

最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。

相關焦點

  • JAVA-新手入門:JAVA資料庫基本操作指南
    java 資料庫基本操作  1、java資料庫操作基本流程  2、幾個常用的重要技巧:  ·可滾動、更新的記錄集  ·批量更新  ·事務處理java資料庫操作基本流程:取得資料庫連接 - 執行sql語句 - 處理執行結果 - 釋放資料庫連接基礎視頻有挺多的你是看你的學習欲望!!!!
  • 如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例
    3、JDBC資料庫連接Connection對象的主要作用軟體應用系統的開發人員要想在Java程序中訪問和操作物理資料庫系統中的數據,首先需要創建出 java.sql.Connection資料庫連接對象實例。
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • Java資料庫類的原型
    我們是否可以創建一個資料庫連接類,該類允許我們僅更改配置文件,然後使用資料庫?我做了這個類的原型,這很簡單。但是這個主意很好,總是使用一個非常簡單的jar文件來獲取安裝資料庫,然後可以執行SQL查詢操作。
  • BeetlSQL 3.1.2 發布,Java 資料庫訪問工具
    <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.1.2-RELEASE</version></dependency>BeetlSQL的目標是提供開發高效,維護高效,運行高效的資料庫訪問框架
  • 資料庫遷移搞炸了!沒用這款開源神器的鍋?
    Flyway正是這麼一款工具,通過Flyway和SpringBoot結合使用,在應用啟動時就可以自動升級資料庫表結構,非常方便,推薦給大家!Flyway簡介Flyway是一款資料庫遷移工具,它讓資料庫遷移變得更加簡單。它能像Git一樣對資料庫進行版本控制,支持命令行工具、Maven插件、第三方工具(比如SpringBoot)等多種使用方式。
  • Javaweb開發學習路線及Java三大框架分享
    Java web開發是什麼?Java web開發,是用Java技術來解決相關web網際網路領域的技術總和。web包括:web伺服器和web客戶端兩部分。Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
  • 什麼?搞Java的你還不會Spring?一篇文章帶你掌握
    Properties注入Properties是Map的子類,所以配置方式其實跟Map沒有什麼區別,但因為Properties的使用還是比較頻繁的,所以單獨拿出來介紹一下。">jdbc:mysql:///test</prop><prop key="driverClass">com.mysql.jdbc.driver</prop></props></property>
  • jBeanBox 4.0.0 發布,微形 Java IOC/AOP 工具
    jBeanBox用於Java6及以上環境,主頁:https://gitee.com/drinkjava2/jBeanBox下表是jBeanBox與Spring、Guice在功能上的一個對比表,紅字部分為本次更新新增的內容:
  • java入門攻略,收下吧,別客氣
    java中的包(package)是什麼?JAVA面向對象的多態是個什麼東西?訪問資料庫這塊的知識點,主要就是JDBC以及JDBC常用的接口和類。我寫的訪問資料庫相關的文章:額,不能填家連結了,有興趣自己點擊我的頭像找一下吧,標題是《戲說JAVA中的JDBC——應用系統與資料庫的博弈》08
  • 資料庫管理工具DataGrip安裝使用
    簡介DataGrip是jetbrains旗下的一款資料庫管理工具,idea就是這家公司發明的,相比Navicat智能代碼補全,實時分析快速修復,數據可視化功能更方便人員操作。運行軟體,點擊激活窗口的Evaluate for free免費試用3.進入軟體,菜單欄Help中選擇Edit Custom VM Options,末尾添加:-javaagent:DataGrip的安裝目錄\jetbrains-agent.jar,後退出軟體。
  • 2萬|北京做Java開發月薪 2 萬,so easy
    = INTEGER}, name = #{name, jdbcType = VARCHAR}, " + "sale = #{sale,jdbcType = INTEGER},version = #{version,jdbcType = INTEGER} " + "WHERE id = #{id, jdbcType = INTEGER}")樂觀鎖更新庫存,解決超賣的問題
  • SmartDb 1.0.0 發布,支持多資料庫、多數據源、讀寫分離的極速...
    Spring和Spring事務 支持SQL鏈式API 支持代碼生成 支持 filter 過濾器 所有類均可擴展 支持Java 6 ( 收費,收費是為了更好的伺候 「客官 」  )【卓大觀點】網際網路已經發展了二十年,每個企業均有一定的數位化發展,但隨著「產業網際網路」,「新基建」,「國產資料庫
  • 5天,2W+字整理資料庫實操指令,附練習題,再說資料庫學不明白
    3、資料庫管理系統 應用程式 圖書館管理系統將數據按照指定的方式存儲到資料庫中的系統稱之為資料庫管理系統可以高效率的取出存儲好的數據(重點)資料庫應用系統----給普通用戶使用的,像淘寶網等4、資料庫系統
  • java從菜鳥到大神學習路線:高級篇,最全系列教程!
    教程學習群:(群號見下方圖片),裡面都是學習java的,如果你想製作酷炫的網頁,想學習java知識,小編歡迎你的加入。小編會在群中不定期分享乾貨源碼,包括我精心整理的一份java零基礎教程。歡迎各位感興趣的的小夥伴。
  • java是什麼文件格式?.java文件怎麼打開?
    java是什麼文件?  Java文件是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平臺的總稱。用Java實現的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態的Web、Internet計算。從此,Java被廣泛接受並推動了Web的迅速發展,常用的瀏覽器現在均支持Java applet。