java連接數(shù)據(jù)庫知識點總結(jié)以及操作應用
前言
項目很多小伙伴學習后端的時候以及學習數(shù)據(jù)庫的時候,在后端程序中,有很多的數(shù)據(jù)來自前端的傳遞或者后端本身創(chuàng)建的,這些數(shù)據(jù)都是需要的,學過數(shù)據(jù)庫的小伙伴知道,數(shù)據(jù)存放到數(shù)據(jù)庫里才容易管理以及安全、方便。那么我們就會需要將程序與數(shù)據(jù)庫進行連接并執(zhí)行相關(guān)的操作,這是后端的一項經(jīng)典又必不可少的技術(shù)
一、java連接數(shù)據(jù)庫技術(shù)
Java 連接技術(shù)是 Java 程序與外部資源進行交互的方式,可以包括連接數(shù)據(jù)庫、連接消息隊列、連接 Web 服務等等。
Java 連接技術(shù)主要有以下幾種:
1.JDBC
JDBC(Java Database Connectivity):JDBC是Java連接數(shù)據(jù)庫的標準API。它提供了一組接口和類,用于與關(guān)系型數(shù)據(jù)庫進行交互。通過JDBC,可以連接到各種數(shù)據(jù)庫(如MySQL、Oracle、SQL Server等),執(zhí)行SQL語句、事務管理和結(jié)果集處理等操作。
2.ORM
ORM框架: ORM(Object-Relational Mapping)框架允許將Java對象和關(guān)系型數(shù)據(jù)庫之間進行映射,進而實現(xiàn)數(shù)據(jù)庫操作。常見的Java ORM框架包括Hibernate、MyBatis等。這些框架提供了對象與數(shù)據(jù)庫表之間的映射關(guān)系配置,簡化了數(shù)據(jù)庫操作的編寫和維護工作。
3.JPA
JPA(Java Persistence API): JPA是一種基于ORM思想的Java持久化規(guī)范。它提供了一組API,用于管理和持久化Java對象到關(guān)系型數(shù)據(jù)庫。JPA具有統(tǒng)一的API和查詢語言,可以與多種底層ORM實現(xiàn)(如Hibernate、EclipseLink等)集成。
4.JPA
數(shù)據(jù)庫連接池: 數(shù)據(jù)庫連接池是一種管理數(shù)據(jù)庫連接的技術(shù),它通過創(chuàng)建和維護一定數(shù)量的數(shù)據(jù)庫連接對象,實現(xiàn)連接的復用和高效管理。常見的Java數(shù)據(jù)庫連接池有Apache Commons DBCP、C3P0和HikariCP等。
5.NoSQL數(shù)據(jù)庫驅(qū)動:
NoSQL數(shù)據(jù)庫驅(qū)動: 除了關(guān)系型數(shù)據(jù)庫,Java也支持連接和操作各種NoSQL數(shù)據(jù)庫,如MongoDB、Redis、Elasticsearch等。這些數(shù)據(jù)庫通常有自己的原生Java驅(qū)動或客戶端庫,用于在Java應用程序中進行連接和數(shù)據(jù)交互。
二、jdbc
JDBC是Java語言中提供的一組API,它提供了一種與關(guān)系型數(shù)據(jù)庫進行交互的標準方式。利用JDBC可以讓Java程序連接到各種不同的關(guān)系型數(shù)據(jù)庫(例如Oracle、MySQL、Microsoft SQL Server等),執(zhí)行SQL語句以及檢索和更新數(shù)據(jù)庫中的數(shù)據(jù)。
JDBC API包含兩部分:JDBC API和JDBC驅(qū)動程序。
JDBC API提供了訪問關(guān)系型數(shù)據(jù)庫的標準方式,其中包含連接數(shù)據(jù)庫所需的類、接口和標準SQL類型。JDBC驅(qū)動程序是一個具體的實現(xiàn),不同類型的關(guān)系型數(shù)據(jù)庫需要不同的驅(qū)動程序?qū)崿F(xiàn)。
在使用JDBC時,我們需要先加載對應的JDBC驅(qū)動程序,然后通過JDBC API提供的接口和類建立數(shù)據(jù)庫連接,最后通過執(zhí)行SQL語句來操作數(shù)據(jù)庫中的數(shù)據(jù),執(zhí)行結(jié)束后需關(guān)閉連接。下面是一個簡單的Java程序示例,展示如何使用JDBC連接數(shù)據(jù)庫并執(zhí)行SQL語句:
import java.sql.*; public class JDBCDemo { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 加載MySQL驅(qū)動程序 Class.forName("com.mysql.jdbc.Driver"); // 獲取數(shù)據(jù)庫連接 String url = "jdbc:mysql://localhost:3306/test?useSSL=false"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); /** 準備寫入 SQL */ // 創(chuàng)建Statement對象 stmt = conn.createStatement(); // 執(zhí)行SQL查詢語句 rs = stmt.executeQuery("SELECT * FROM student"); // 處理查詢結(jié)果 while (rs.next()) { System.out.println(rs.getString("Studentname")); //獲取Studentname這一列的數(shù)據(jù) } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { // 關(guān)閉ResultSet、Statement和Connection try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
上面的示例程序中,我們首先加載了MySQL數(shù)據(jù)庫的JDBC驅(qū)動,然后通過DriverManager獲取數(shù)據(jù)庫連接,創(chuàng)建Statement對象并執(zhí)行SQL查詢語句,最后處理查詢結(jié)果并關(guān)閉所持有的JDBC資源。
三、連接步驟
使用 JDBC 連接數(shù)據(jù)庫需要分為以下幾個步驟:
1. 加載數(shù)據(jù)庫驅(qū)動
在連接數(shù)據(jù)庫之前,需要先加載相應的 JDBC 驅(qū)動程序。不同類型的數(shù)據(jù)庫需要使用不同的驅(qū)動程序,例如 MySQL 使用的驅(qū)動程序是 com.mysql.jdbc.Driver,Oracle 使用的是 oracle.jdbc.driver.OracleDriver,如果忘記加載驅(qū)動程序,會導致連接數(shù)據(jù)庫失敗。
加載驅(qū)動程序可以通過 Class.forName() 方法實現(xiàn),例如:
Class.forName("com.mysql.jdbc.Driver");
2. 創(chuàng)建數(shù)據(jù)庫連接
在加載完成驅(qū)動程序之后,就可以使用 DriverManager.getConnection() 方法來創(chuàng)建連接對象。該方法需要傳遞一個包含連接信息的 URL(Uniform Resource Locator)、用戶名和密碼,例如:
String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password);
其中,“jdbc:mysql://” 表示連接的數(shù)據(jù)庫類型是 MySQL,“localhost” 表示連接到本地主機,“3306” 表示連接到 MySQL 的端口號,“mydatabase” 表示要連接的數(shù)據(jù)庫名稱,“root” 和 “mypassword” 分別表示連接用戶名和密碼。
3. 創(chuàng)建 Statement 或 PreparedStatement 對象
連接數(shù)據(jù)庫之后,可以使用 Statement 或 PreparedStatement 對象執(zhí)行 SQL 語句。其中,Statement 對象用于執(zhí)行靜態(tài) SQL 語句或者預編譯的 SQL 語句,PreparedStatement 對象用于執(zhí)行帶參數(shù)的 SQL 語句。
創(chuàng)建 Statement 或 PreparedStatement 對象可以通過 Connection 的 createStatement() 或 prepareStatement() 方法實現(xiàn),例如:
// 創(chuàng)建 Statement 對象 Statement stmt = conn.createStatement(); // 創(chuàng)建 PreparedStatement 對象 PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE username = ?");
4. 執(zhí)行 SQL 語句
創(chuàng)建好 Statement 或 PreparedStatement 對象之后,就可以使用 execute()、executeQuery() 或 executeUpdate() 方法來執(zhí)行 SQL 語句了。其中,execute() 用于執(zhí)行任意一種 SQL 語句,executeQuery() 用于執(zhí)行 SELECT 語句并返回結(jié)果集,executeUpdate() 用于執(zhí)行 INSERT、UPDATE 和 DELETE 語句并返回受影響的記錄數(shù)。
// 執(zhí)行查詢語句,返回結(jié)果集 ResultSet rs = stmt.executeQuery("SELECT * FROM user"); // 執(zhí)行插入語句,返回受影響的記錄數(shù) int count = stmt.executeUpdate("INSERT INTO user (username, password) VALUES ('admin', '123456')");
5. 處理結(jié)果集
執(zhí)行 SQL 語句之后,需要將結(jié)果集通過 ResultSet 對象進行獲取。ResultSet 對象的使用方法和 Statement 或 PreparedStatement 對象類似,例如可以使用 next() 方法將當前記錄移動到下一條記錄,使用 getXXX() 獲取記錄中某個列的值,例如:
while (rs.next()) { int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); }
6. 關(guān)閉資源
最后,在不再使用數(shù)據(jù)庫連接、Statement、PreparedStatement 或 ResultSet 對象時,需要將它們及時關(guān)閉,釋放對數(shù)據(jù)庫系統(tǒng)的連接,以減少系統(tǒng)負擔。例如:
rs.close(); stmt.close(); conn.close();
以上就是使用 JDBC 連接到數(shù)據(jù)庫并執(zhí)行 SQL 語句的基本步驟。需要注意的是,使用 JDBC 連接數(shù)據(jù)庫需要加上異常處理,防止在執(zhí)行過程中出現(xiàn)異常導致程序崩潰。
總結(jié)
到此這篇關(guān)于java連接數(shù)據(jù)庫知識點總結(jié)以及操作應用的文章就介紹到這了,更多相關(guān)java連接數(shù)據(jù)庫操作應用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring?Boot+gRPC構(gòu)建微服務并部署的案例詳解
這篇文章主要介紹了使用Spring?Boot+gRPC構(gòu)建微服務并部署,Spring Cloud僅僅是一個開發(fā)框架,沒有實現(xiàn)微服務所必須的服務調(diào)度、資源分配等功能,這些需求要借助Kubernetes等平臺來完成,本文給大家介紹的非常詳細,需要的朋友參考下吧2022-06-06Feign利用自定義注解實現(xiàn)路徑轉(zhuǎn)義詳解
這篇文章主要講解一下如何通過注解實現(xiàn)對路由中的路徑進行自定義編碼,文中的示例代碼講解詳細,對我們學習或工作有一定的幫助,需要的可以參考一下2022-06-06java實現(xiàn)解析二進制文件的方法(字符串、圖片)
本篇文章主要介紹了java實現(xiàn)解析二進制文件的方法(字符串、圖片),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02基于spring AOP @Around @Before @After的區(qū)別說明
這篇文章主要介紹了基于spring AOP @Around @Before @After的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合
今天我們來聊聊 RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-10-10詳解spring boot jpa整合QueryDSL來簡化復雜操作
這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡化復雜操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04