java JDBC主要組件連接數(shù)據(jù)庫及執(zhí)行SQL過程示例全面詳解
什么是JDBC?
JDBC(Java Database Connectivity)是一個(gè)Java API,用于連接和執(zhí)行SQL語句與關(guān)系型數(shù)據(jù)庫進(jìn)行交互。JDBC提供了一組接口和類,使Java程序能夠與各種數(shù)據(jù)庫通信,如MySQL、Oracle、PostgreSQL等。
JDBC的主要組件
JDBC主要由以下幾個(gè)組件組成:
DriverManager
:負(fù)責(zé)加載數(shù)據(jù)庫驅(qū)動,并建立與數(shù)據(jù)庫的連接。Connection
:表示與數(shù)據(jù)庫的連接。Statement
:用于執(zhí)行SQL語句。PreparedStatement
:用于執(zhí)行預(yù)編譯的SQL語句。ResultSet
:表示查詢結(jié)果集。
連接數(shù)據(jù)庫
在連接數(shù)據(jù)庫之前,需要確保已經(jīng)安裝了相應(yīng)的數(shù)據(jù)庫驅(qū)動并將其添加到項(xiàng)目中。以下是一個(gè)簡單示例,演示如何使用JDBC連接到MySQL數(shù)據(jù)庫:
import java.sql.Connection; import java.sql.DriverManager; public class JdbcConnectExample { public static void main(String[] args) { try { // 加載數(shù)據(jù)庫驅(qū)動 Class.forName("com.mysql.cj.jdbc.Driver"); // 連接到數(shù)據(jù)庫 String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); System.out.println("Connected to database!"); // 關(guān)閉連接 connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
執(zhí)行SQL查詢
要使用JDBC執(zhí)行SQL查詢,可以創(chuàng)建一個(gè)Statement
對象,然后調(diào)用其executeQuery()
方法。以下是一個(gè)簡單示例,演示如何查詢數(shù)據(jù)庫中的數(shù)據(jù):
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcQueryExample { public static void main(String[] args) { try { // 加載數(shù)據(jù)庫驅(qū)動并連接到數(shù)據(jù)庫 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 創(chuàng)建Statement對象并執(zhí)行SQL查詢 Statement statement = connection.createStatement(); String sql = "SELECT id, name FROM users"; ResultSet resultSet = statement.executeQuery(sql); // 處理結(jié)果集 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 關(guān)閉資源 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
執(zhí)行SQL更新
要使用JDBC執(zhí)行SQL更新(如插入、更新或刪除),可以創(chuàng)建一個(gè)Statement
對象,然后調(diào)用其executeUpdate()
方法。以下是一個(gè)簡單示例,演示如何向數(shù)據(jù)庫中插入數(shù)據(jù):
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcUpdateExample { public static void main(String[] args) { try { // 加載數(shù)據(jù)庫驅(qū)動并連接到數(shù)據(jù)庫 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 創(chuàng)建Statement對象并執(zhí)行SQL更新 Statement statement = connection.createStatement(); String sql = "INSERT INTO users (name, age) VALUES ('John Doe', 30)"; int rowsAffected = statement.executeUpdate(sql); System.out.println("Rows affected: " + rowsAffected); // 關(guān)閉資源 statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } } **6. 使用PreparedStatement** `PreparedStatement`是一個(gè)預(yù)編譯的`Statement`對象,可以提高SQL語句的執(zhí)行效率。它還可以防止SQL注入攻擊。以下是一個(gè)簡單示例,演示如何使用`PreparedStatement`插入數(shù)據(jù): ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class JdbcPreparedStatementExample { public static void main(String[] args) { try { // 加載數(shù)據(jù)庫驅(qū)動并連接到數(shù)據(jù)庫 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; Connection connection = DriverManager.getConnection(url, username, password); // 創(chuàng)建PreparedStatement對象并執(zhí)行SQL更新 String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, "Jane Doe"); preparedStatement.setInt(2, 28); int rowsAffected = preparedStatement.executeUpdate(); System.out.println("Rows affected: " + rowsAffected); // 關(guān)閉資源 preparedStatement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
事務(wù)處理
事務(wù)是一組邏輯操作單元,執(zhí)行這些操作要么全部成功,要么全部失敗。在JDBC中,可以使用Connection
對象的commit()
和rollback()
方法進(jìn)行事務(wù)處理。以下是一個(gè)簡單示例,演示如何使用事務(wù)處理:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class JdbcTransactionExample { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; try { // 加載數(shù)據(jù)庫驅(qū)動并連接到數(shù)據(jù)庫 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; connection = DriverManager.getConnection(url, username, password); // 關(guān)閉自動提交(開啟事務(wù)) connection.setAutoCommit(false); // 執(zhí)行SQL更新 String sql = "UPDATE users SET age = age + 1 WHERE id = ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); preparedStatement.executeUpdate(); // 提交事務(wù) connection.commit(); System.out.println("Transaction committed."); } catch (Exception e) { // 回滾事務(wù) try { if (connection != null) { connection.rollback(); System.out.println("Transaction rolled back."); } } catch (Exception ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { // 關(guān)閉資源 try { if (preparedStatement != null) { preparedStatement.close(); } if (connection != null) { connection.close(); } } catch (Exception e) { e.printStackTrace(); } } } }
關(guān)閉資源
在JDBC中,需要確保及時(shí)關(guān)閉資源,如Connection
、Statement
和ResultSet
等??梢允褂?code>close()方法或者Java 7中引入的try-with-resources
語句進(jìn)行資源關(guān)閉。以下是一個(gè)簡單示例,演示如何使用try-with-resources
關(guān)閉資源:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcCloseResourceExample { public static void main(String[] args) { try { // 加載數(shù)據(jù)庫驅(qū)動 Class.forName("com.mysql.cj.jdbc.Driver"); // 連接到數(shù)據(jù)庫 String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; String username = "root"; String password = "mypassword"; try (Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement()) { // 執(zhí)行SQL查詢并處理結(jié)果集
以上就是java JDBC主要組件連接數(shù)據(jù)庫及執(zhí)行SQL過程示例全面詳解的詳細(xì)內(nèi)容,更多關(guān)于java JDBC連接數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字
下面小編就為大家?guī)硪黄獪\談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Spring注解驅(qū)動開發(fā)實(shí)現(xiàn)屬性賦值
這篇文章主要介紹了Spring注解驅(qū)動開發(fā)實(shí)現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04SpringBoot實(shí)現(xiàn)動態(tài)控制定時(shí)任務(wù)支持多參數(shù)功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)動態(tài)控制定時(shí)任務(wù)-支持多參數(shù)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05關(guān)于Jackson的JSON工具類封裝 JsonUtils用法
這篇文章主要介紹了關(guān)于Jackson的JSON工具類封裝 JsonUtils用法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringBoot實(shí)現(xiàn)登錄攔截器的方法詳解
其實(shí)spring?boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了。本文主要給大家介紹了關(guān)于如何在Springboot實(shí)現(xiàn)登陸攔截器功能,需要的朋友可以參考下2022-07-07