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

2020-12-22 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中資料庫:JDBC的使用
    JDBC是java中提供的一套資料庫編程API,它定義了一套用來訪問資料庫的標準Java類庫(位於java.sql和javax.sql
  • 面試被問:JDBC底層是如何連接資料庫的?|sql|mysql|數據源|java|...
    資料庫驅動  加載MySql的驅動類 :  Class.forName(  "com.mysql.jdbc.Driver"  );  我們安裝好資料庫之後,我們的應用程式也是不能直接使用資料庫的,必須要通過相應的資料庫驅動程序,通過驅動程序去和資料庫打交道。
  • Spring JDBC訪問關係型資料庫
    點擊上面「天碼營」,加入我們,快速成長~「內容簡介」資料庫操作是我們搭建應用的基本操作,今天我們來學習一下如何利用
  • 面試被問:JDBC底層是如何連接資料庫的?
    資料庫驅動加載MySql的驅動類 :Class.forName("com.mysql.jdbc.Driver"); 我們安裝好資料庫之後,我們的應用程式也是不能直接使用資料庫的,必須要通過相應的資料庫驅動程序,通過驅動程序去和資料庫打交道。其實也就是資料庫廠商的JDBC接口實現,即對Connection等接口的實現類的jar文件。
  • 「詳細」MySQL資料庫與JDBC編程
    Class.forName("com.mysql.ch.hdbc.Driver");Class.forName("oracle.jdbc.driver.OracleDriver");2、通過DriverManager獲取資料庫連接DriverManager.getConnection("jdbc:mysql
  • Java使用jdbc連接SQLServer資料庫完成多條件模糊查詢
    引言最近想在網上找些使用jdbc連接操作SQLserver的完成模糊查詢或者多條件Java代碼,
  • JAVA-新手入門:JAVA資料庫基本操作指南
    java 資料庫基本操作  1、java資料庫操作基本流程  2、幾個常用的重要技巧:  ·可滾動、更新的記錄集  ·批量更新  ·事務處理java資料庫操作基本流程:取得資料庫連接 - 執行sql語句 - 處理執行結果 - 釋放資料庫連接基礎視頻有挺多的你是看你的學習欲望!!!!
  • Java中加載資料庫驅動的方式有幾種?背後的原理是什麼?
    Driver接口先來了解下java.sql.Driver接口,java.sql.Driver是所有JDBC驅動程序需要實現的接口。這個接口是提供給資料庫廠商使用的,不同廠商實現該接口的類名是不同的,例如MySQL 8.x的JDBC驅動的類名是:com.mysql.cj.jdbc.Driver。
  • 常用資料庫 JDBC URL格式(總結)
    .jcc.DB2DriverJDBC URL: jdbc:db2:<database_name>MySQLMySQL Connector/J Driver驅動程序包名:mysql-connector-java-x.x.xx-bin.jar驅動程序類名:com.mysql.jdbc.DriverJDBC URL: jdbc:mysql://<
  • JDBC簡介和JDBC案例
    JDBC概述簡介JDBC:java database connectivity SUN公司提供的一套操作資料庫的標準規範。JDBC與資料庫驅動的關係:接口與實現的關係。JDBC規範掌握四個核心對象: DriverManager:用於註冊驅動【實現類】 Connection: 表示與資料庫創建的連接【接口】 Statement: 操作資料庫sql語句的對象【接口】 ResultSet: 結果集或一張虛擬表【接口】JDBC的準備工作
  • JDBC MySQL
    前言:什麼是JDBC一、準備工作(一):MySQL安裝配置和基礎學習二、準備工作(二):下載資料庫對應的jar包並導入
  • 如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例
    3、JDBC資料庫連接Connection對象的主要作用軟體應用系統的開發人員要想在Java程序中訪問和操作物理資料庫系統中的數據,首先需要創建出 java.sql.Connection資料庫連接對象實例。
  • Spring Boot 採用Sharding-JDBC 實現Mybaits的分庫分表功能
    Sharding-JDBC簡介Sharding-JDBC是當當網的開源產品,他直接封裝JDBC API,可以理解為增強版的JDBC驅動,舊代碼遷移成本幾乎為零:可適用於任何基於java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 學習java需要會哪些知識才能夠去應聘工作?
    最後,我們會把入門階段的多人聊天項目部署在Linux伺服器上,讓大家更好體驗java跨平臺的特性第一天、XML的簡介和語法認識:xml的簡介XML的語法XML的文檔構建模塊的定義第二天、數據建模和java解析XML的多種API:第三天
  • 每日一課 | Java 將數據從資料庫導出到 PDF
    這篇文章將向您展示如何通過使用Java的Free Spire.PDF將 Microsoft Access資料庫中的數據導出為表格的PDF 。
  • JDBC這個問題,問的小夥伴一臉懵逼
    資料庫驅動加載MySql的驅動類 :Class.forName("com.mysql.jdbc.Driver"); 我們安裝好資料庫之後,我們的應用程式也是不能直接使用資料庫的,必須要通過相應的資料庫驅動程序,通過驅動程序去和資料庫打交道
  • JDBC資料庫連接
    什麼叫做JDBC?JDBC全稱為:Java Data Base Connectivity,java資料庫連接。是一種用於執行SQL語句的javaAPI,為多種關係資料庫提供統一訪問。簡單點來說:某個行業都會有一個標準,都會提供一個行業標準文檔,而JDBC就是我們這個行業其中一個資料庫連接標準。它是由一組java語言編寫的類和接口組成。使用它就能很輕鬆的訪問所屬的資料庫。舉個現實的例子:開門,我相信大家都會開過門吧!
  • JDBC 回顧
    ,提到數據訪問,學習 Java 的同學瞬間能就想起 JDBC 技術,JDBC 是 Java Database Connectivity 的全稱,是 Java 語言中用來規範客戶端程序如何來訪問資料庫的應用程式接口,提供了諸如查詢和更新資料庫中數據的一套標準的 API,這套標準不同的資料庫廠家之間共同準守,並提供各自的具體實現。
  • screw資料庫開發文檔
    文章首推今日主題:screw資料庫開發文檔生成簡介 相信大家會有資料庫文檔的需求,就是我們在開發中需要知道資料庫中某個表的情況,我們可能會去資料庫中查找,但是如果表非常多,而且表的欄位也非常多的時候,這個是一個非常不明智的選擇,我們可以生成一個資料庫開發文檔隨時查閱環境 實現過程 1、引入依賴jdbc這個依賴不能少
  • 如何使用 Spring 對資料庫進行 CURD?
    --資料庫驅動 --><propertyname="driverClassName"value="com.mysql.jdbc.Driver" /><!--連接資料庫的ur1 --><propertyname="url"value="jdbc:mysql://localhost:3306/spring_db" /><!