JDBC 是 J**A Database Connectivity 的縮寫,它定義了一組用於訪問資料庫的規範和介面。 但它不參與資料庫訪問本身的實現。 因此,對於現有的資料庫(例如,MySQL、Oracle),要麼資料庫製造商自己提供這些規範和介面的實現,要麼社群提供這些實現。
對於MySQL資料庫,我們通常使用以下包來訪問資料庫:
mysql mysql-connector-j**a 5.1.39
JDBC 的類包含在 J**A 中SQL 和 J**AXsql。順便說一句,J**AX 是 Sun 提供的擴充套件包,它提供了對原始 J**A 包的一些擴充套件處理,隨著時間的推移,J**AX 在許多程序中都成為了 J**A 核心架構的一部分,比如 J**AX 的 Swing 包。 在對資料庫進行操作時,我們需要先獲取連線,如下所示:
connection conn = drivermanager.getconnection("jdbc:somejdbcvendor:other data needed by some jdbc vendor", "mylogin", "mypassword");對於MySQL資料庫,獲取連線格式如下:try catch (throwable t)
connection conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/test", "mylogin", "mypassword");
DriverManager是JDBC提供的驅動管理類,負責根據引數中的連線URL尋找合適的驅動。 查詢用於連線(例如“jdbc:mysql:”)的MySQL驅動程式和用於連線(例如“jdbc:oracle:”)的Oracle驅動程式。 drivermanager.getconnection的核心邏輯如下:
for(driverinfo adriver : registereddrivers)通過 DriverManagergetconnection 獲取連線後,我們建立並執行語句來新增、刪除、修改和檢查資料庫。 JDBC 有三種型別的語句:catch (sqlexception ex)
否則 如果沒有合適的驅動程式,則會引發異常。
if (reason != null) catch (sqlexception e)
construct a new driver and register it with drivermanager
throws sqlexception
if a database error occurs.
public driver() throws sqlexception
讓我們看一下為 mysql-connect-j**a 包建立 preparedstatement 的過程。 當我們呼叫 conn 時preparestatement()方法,其核心邏輯如下:
public j**a.sql.preparedstatement preparestatement(string sql, int resultsettype, int resultsetconcurrency) throws sqlexception以上**已註解,希望能幫助大家理解。 如你所見,如果啟用了本地快取,則首先在本地快取中找到 SQL 對應的預處理 PreparedStatement,如果找到,則重用此 PreparedStatement。if (this.useserverpreparedstmts &&canserverprepare)
如果在本地快取中找不到相應的 PreparedStatement,請建立新的 PreparedStatement
if (pstmt == null)
pstmt.setresultsettype(resultsettype);
pstmt.setresultsetconcurrency(resultsetconcurrency);
catch (sqlexception sqlex)
else else catch (sqlexception sqlex) else
else return pstmt;
語句(包括 preparedstatement)使用完畢後,需要呼叫 close 方法。 對於 PreparedStatement,如果它由資料庫進行預處理並啟用了本地快取,則會在 close 方法中將其寫入快取,以便可以在此連線的後續 SQL 執行中重用相同的預處理。
public void close() throws sqlexception使用JDBC的連線和語句訪問MySQL資料庫的完整示例如下:realclose(true, true);
import j**a.sql.connection;
import j**a.sql.drivermanager;
import j**a.sql.statement;
public class mysqltest {
public static void main(string args) {
connection conn = null;
statement stmt = null;
try {conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/test", "mylogin", "mypassword");
stmt = conn.createstatement();
string sql = "insert into test values ('dengshenyu','j**a')";
stmt.executeupdate(sql);
catch (exception ex) {
ex.printstacktrace();
finally {
try {if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
catch (exception e) {
e.printstacktrace();