java JDBC主要組件連接數(shù)據(jù)庫及執(zhí)行SQL過程示例全面詳解
什么是JDBC?
JDBC(Java Database Connectivity)是一個Java API,用于連接和執(zhí)行SQL語句與關(guān)系型數(shù)據(jù)庫進行交互。JDBC提供了一組接口和類,使Java程序能夠與各種數(shù)據(jù)庫通信,如MySQL、Oracle、PostgreSQL等。
JDBC的主要組件
JDBC主要由以下幾個組件組成:
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ū)動并將其添加到項目中。以下是一個簡單示例,演示如何使用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)建一個Statement對象,然后調(diào)用其executeQuery()方法。以下是一個簡單示例,演示如何查詢數(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)建一個Statement對象,然后調(diào)用其executeUpdate()方法。以下是一個簡單示例,演示如何向數(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`是一個預(yù)編譯的`Statement`對象,可以提高SQL語句的執(zhí)行效率。它還可以防止SQL注入攻擊。以下是一個簡單示例,演示如何使用`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()方法進行事務(wù)處理。以下是一個簡單示例,演示如何使用事務(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中,需要確保及時關(guān)閉資源,如Connection、Statement和ResultSet等??梢允褂?code>close()方法或者Java 7中引入的try-with-resources語句進行資源關(guān)閉。以下是一個簡單示例,演示如何使用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)鍵字。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Spring注解驅(qū)動開發(fā)實現(xiàn)屬性賦值
這篇文章主要介紹了Spring注解驅(qū)動開發(fā)實現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
SpringBoot實現(xiàn)動態(tài)控制定時任務(wù)支持多參數(shù)功能
這篇文章主要介紹了SpringBoot實現(xiàn)動態(tài)控制定時任務(wù)-支持多參數(shù)功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
關(guān)于Jackson的JSON工具類封裝 JsonUtils用法
這篇文章主要介紹了關(guān)于Jackson的JSON工具類封裝 JsonUtils用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

