更新時(shí)間:2022-06-10 09:58:20 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2156次
Java作為最杰出的編程語言之一,為數(shù)據(jù)庫提供了廣泛的支持。它幫助我們通過JDBC(Java Database Connectivity)連接各種數(shù)據(jù)庫。在本文中,動(dòng)力節(jié)點(diǎn)小編將告訴您如何使用 JDBC 連接數(shù)據(jù)庫并執(zhí)行查詢。
本文涵蓋以下主題:
JDBC簡介
通用 JDBC 組件
創(chuàng)建 JDBC 應(yīng)用程序的步驟
JDBC 連接
JDBC 是標(biāo)準(zhǔn) Java API 之一,用于在Java 編程語言和廣泛的數(shù)據(jù)庫之間實(shí)現(xiàn)與數(shù)據(jù)庫無關(guān)的連接。此 API 允許您使用結(jié)構(gòu)化查詢語言( SQL ) 對訪問請求語句進(jìn)行編碼。這主要涉及打開連接、創(chuàng)建 SQL 數(shù)據(jù)庫、執(zhí)行 SQL 查詢?nèi)缓蟮竭_(dá)輸出。
JDBC API 可用于訪問存儲(chǔ)在任何關(guān)系數(shù)據(jù)庫中的表格數(shù)據(jù)。有了這個(gè),您可以更新、保存、獲取和刪除數(shù)據(jù)庫中的數(shù)據(jù)。它類似于 Microsoft 提供的開放式數(shù)據(jù)庫連接 (ODBC)。
為了更好地理解 JDBC 的工作原理,讓我們深入探討該主題并了解 Java 數(shù)據(jù)庫連接背后的架構(gòu)。
JDBC API 提供以下接口和類
DriverManager:這主要用于管理數(shù)據(jù)庫驅(qū)動(dòng)程序列表。識別某個(gè)子協(xié)議的驅(qū)動(dòng)程序?qū)⒂糜诮?shù)據(jù)庫連接。
驅(qū)動(dòng)程序是處理與數(shù)據(jù)庫服務(wù)器通信的接口。它還抽象了細(xì)節(jié)在使用 Driver 對象時(shí)關(guān)聯(lián)的對象。
Connection 是一個(gè)接口,它包含連接到數(shù)據(jù)庫所需的所有方法。連接對象處理數(shù)據(jù)庫的通信功能。語境。
現(xiàn)在讓我們繼續(xù)下一個(gè)主題,看看創(chuàng)建 JDBC 應(yīng)用程序所需的步驟。
為了創(chuàng)建 JDBC 應(yīng)用程序,您需要執(zhí)行幾個(gè)步驟。讓我們看看它們是什么。
導(dǎo)入包: 您需要包含所有包含數(shù)據(jù)庫編程所需的 JDBC 類的包。大多數(shù)情況下,使用import java.sql.* 就足夠了。
注冊 JDBC 驅(qū)動(dòng)程序: 這里你必須初始化一個(gè)驅(qū)動(dòng)程序,以便你可以打開與數(shù)據(jù)庫的通信通道。
打開連接: 這里可以使用 getConnection() 方法創(chuàng)建一個(gè) Connection 對象,該對象代表與數(shù)據(jù)庫的物理連接。
執(zhí)行查詢: 這實(shí)際上需要使用 Statement 類型的對象來構(gòu)建 SQL 語句并將其提交到數(shù)據(jù)庫。
從結(jié)果集中提取數(shù)據(jù): 建議您使用適當(dāng)?shù)膅etXXX() 方法從結(jié)果集中提取數(shù)據(jù)。
清理環(huán)境:在這里,與依賴 JVM 的垃圾收集相比,顯式關(guān)閉所有數(shù)據(jù)庫資源至關(guān)重要。
現(xiàn)在您已經(jīng)看到了創(chuàng)建 JDBC 應(yīng)用程序所涉及的各個(gè)步驟,讓我們看一個(gè)創(chuàng)建數(shù)據(jù)庫和建立連接的示例代碼。
package Edureka;
import java.sql.*;
import java.sql.DriverManager;
public class Example {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.cj.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,"root","");
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close()
}catch(SQLException se2){
}// nothing can be done
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
}//end main
} // end Example
上面的代碼在您的 localhost 數(shù)據(jù)庫中創(chuàng)建了一個(gè)表。要在創(chuàng)建的數(shù)據(jù)庫中插入值,您可以參考以下代碼。小編將只為第 4 步編寫代碼。其余代碼與上面相同。
//STEP 4: Execute a query
System.out.println("Creating table in given database...");
stmt = conn.createStatement();
String sql = "CREATE TABLE EMPLOYEES " +
"(id INTEGER not NULL, " +
" first VARCHAR(255), " +
" last VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY ( id ))";
stmt.executeUpdate(sql);
System.out.println("Created table in given database...");
System.out.println("Inserting records into the table...");
stmt =conn.createStatement();
String sql ="INSERT INTO Employees VALUES (100, 'Kriss', 'Kurian', 18)";
stmt.executeUpdate(sql);
sql = "INSERT INTO Employees VALUES (101, 'Enrique', 'John', 25)";
stmt.executeUpdate(sql);
sql= "INSERT INTO Employees (102, 'Taylor', 'Swift', 30)";
stmt.executeUpdate(sql);
sql= "INSERT INTO Employees VALUES(103, 'Linkin', 'Park', 28)";
stmt.executeUpdate(sql);
System.out.println("Inserted records into the table...");
因此,這就是您可以建立與數(shù)據(jù)庫的連接并在表中插入值的方式。現(xiàn)在讓我們進(jìn)一步了解各種 JDBC 驅(qū)動(dòng)程序類型。
JDBC 驅(qū)動(dòng)程序用于實(shí)現(xiàn) JDBC API 中定義的接口,用于與數(shù)據(jù)庫服務(wù)器進(jìn)行交互。本質(zhì)上, JDBC 驅(qū)動(dòng)程序做了三件事,它們?nèi)缦拢?. 建立與數(shù)據(jù)源的連接。2. 它將查詢和更新語句發(fā)送到數(shù)據(jù)源。3. 最后,它處理結(jié)果。
例如,JDBC 驅(qū)動(dòng)程序通過發(fā)送SQL 或數(shù)據(jù)庫命令幫助您打開數(shù)據(jù)庫連接以與之交互。如果您想了解更多關(guān)于 JDBC Driver 的類型,可以參考這篇關(guān)于JDBC Drivers的文章。
現(xiàn)在讓我們進(jìn)一步了解 JDBC 連接。
導(dǎo)入 JDBC 包: 將 導(dǎo)入 語句添加到您的Java 程序以在您的 Java 代碼中導(dǎo)入所需的類。
注冊 JDBC 驅(qū)動(dòng)程序:在這一步中,JVM將所需的驅(qū)動(dòng)程序?qū)崿F(xiàn)加載到內(nèi)存中,以便它可以滿足 JDBC 請求。注冊驅(qū)動(dòng)程序有兩種方法。
注冊驅(qū)動(dòng)程序最合適的方法是使用Java的forName()方法將驅(qū)動(dòng)程序的類文件動(dòng)態(tài)加載到內(nèi)存中,它會(huì)自動(dòng)注冊它。此方法適用,因?yàn)樗试S您使驅(qū)動(dòng)程序注冊可配置和可移植。看看下面的代碼:
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex)
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
可以用來注冊驅(qū)動(dòng)程序的第二種方法是使用靜態(tài) registerDriver()方法。
try {
Driver myDriver = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( myDriver );
}
catch(ClassNotFoundException ex)
{
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
如果您使用的是不兼容 JDK 的 JVM,例如 Microsoft 提供的 JVM,您應(yīng)該使用 registerDriver()方法。這里每個(gè)表單都需要一個(gè)數(shù)據(jù)庫 URL。
數(shù)據(jù)庫 URL 公式: URL 公式對于創(chuàng)建格式正確的地址是必要的,該地址指向您要連接的數(shù)據(jù)庫。加載驅(qū)動(dòng)程序后,您可以使用DriverManager.getConnection() 方法建立連接。DriverManager.getConnection() 方法是 -
獲取連接(字符串網(wǎng)址)
getConnection(字符串 url,屬性道具)
getConnection(字符串 url, 字符串用戶, 字符串密碼)
創(chuàng)建連接對象
您可以使用數(shù)據(jù)庫 URL、用戶名和密碼以及使用屬性對象來創(chuàng)建連接。
關(guān)
最后,要結(jié)束數(shù)據(jù)庫會(huì)話,您需要關(guān)閉所有數(shù)據(jù)庫連接。但是,如果您忘記了,Java 的垃圾收集器會(huì)在清理陳舊對象時(shí)關(guān)閉連接。
conn.close(); // Used to close the connection
通過上述,相信大家對JDBC連接數(shù)據(jù)庫的代碼已經(jīng)有所了解,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的JDBC視頻教程,里面還有更豐富的知識等著大家去學(xué)習(xí),希望對大家能夠有所幫助哦。
初級 202925
初級 203221
初級 202629
初級 203743