java教程之JDBC連接數(shù)據(jù)庫

創(chuàng)建一個以JDBC連接數(shù)據(jù)庫的程序步驟:

1、加載JDBC驅動程序:

? ? 在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅動到JVM(Java虛擬機), 這通過java.lang.Class類的靜態(tài)方法forName(String??className)實現(xiàn)。

?例如:

try{

? ?//加載MySql的驅動類?

? ?Class.forName("com.mysql.jdbc.Driver")?;

? ? }catch(ClassNotFoundException?e){

? ? System.out.println("找不到驅動程序類?,加載驅動失敗!");

? ? ?e.printStackTrace()?;

????}

? ?成功加載后,會將Driver類的實例注冊到DriverManager類中。

?2、提供JDBC連接的URL

????連接URL定義了連接數(shù)據(jù)庫時的協(xié)議、子協(xié)議、數(shù)據(jù)源標識。

????書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標識

? ? 協(xié)議:在JDBC中總是以jdbc開始

? ? 子協(xié)議:是橋連接的驅動程序或是數(shù)據(jù)庫管理系統(tǒng)名稱。

? ? 數(shù)據(jù)源標識:標記找到數(shù)據(jù)庫來源的地址與連接端口。

? ? 例如:(MySql的連接URL)

????jdbc:mysql:

? ? ? ? //localhost:3306/test?useUnicode=true&characterEncoding=gbk?;?

? ?useUnicode=true:表示使用Unicode字符集。如果characterEncoding設置為

? ?gb2312或GBK,本參數(shù)必須設置為true?。characterEncoding=gbk:字符編碼方式。

?3、創(chuàng)建數(shù)據(jù)庫的連接

????要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請求并獲得Connection對象,

?????該對象就代表一個數(shù)據(jù)庫的連接。

?????使用DriverManager的getConnectin(String?url?,?String?username?,

????String?password?)方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和

?????密碼來獲得。

?????例如:

?????//連接MySql數(shù)據(jù)庫,用戶名和密碼都是root?

?????String?url?=?"jdbc:mysql://localhost:3306/test";

?????String?username?=?"root";

?????String?password?=?"root";

?????try{

Connection?con?=

DriverManager.getConnection(url?,?username?,?password?)?;

?????}catch(SQLException?se){

????System.out.println("數(shù)據(jù)庫連接失敗!");

se.printStackTrace()?;

}

?4、創(chuàng)建一個Statement

?????要執(zhí)行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3

?????種類型:

??????1、執(zhí)行靜態(tài)SQL語句。通常通過Statement實例實現(xiàn)。

??????2、執(zhí)行動態(tài)SQL語句。通常通過PreparedStatement實例實現(xiàn)。

??????3、執(zhí)行數(shù)據(jù)庫存儲過程。通常通過CallableStatement實例實現(xiàn)。

????具體的實現(xiàn)方式:

Statement?stmt?=?con.createStatement()?;

PreparedStatement?pstmt?=?con.prepareStatement(sql)?;

CallableStatement?cstmt?=

????????????????????????????con.prepareCall("{CALL?demoSp(??,??)}")?;

?5、執(zhí)行SQL語句

????Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery?、executeUpdate

???和execute

????1、ResultSet?executeQuery(String?sqlString):執(zhí)行查詢數(shù)據(jù)庫的SQL語句

????????,返回一個結果集(ResultSet)對象。

?????2、int?executeUpdate(String?sqlString):用于執(zhí)行INSERT、UPDATE或

????????DELETE語句以及SQL?DDL語句,如:CREATE?TABLE和DROP?TABLE等

?????3、execute(sqlString):用于執(zhí)行返回多個結果集、多個更新計數(shù)或二者組合的

????????語句。

???具體實現(xiàn)的代碼:

??????????ResultSet?rs?=?stmt.executeQuery("SELECT?*?FROM?...")?;

????int?rows?=?stmt.executeUpdate("INSERT?INTO?...")?;

????booleanflag?=?stmt.execute(String?sql)?;

?6、處理結果

????兩種情況:

?????1、執(zhí)行更新返回的是本次操作影響到的記錄數(shù)。

?????2、執(zhí)行查詢返回的結果是一個ResultSet對象。

??????ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對這些

??????行中數(shù)據(jù)的訪問。

??????使用結果集(ResultSet)對象的訪問方法獲取數(shù)據(jù):

?????while(rs.next()){

?????????String?name?=?rs.getString("name")?;

????String?pass?=?rs.getString(1)?;?//?此方法比較高效?

}

????(列是從左到右編號的,并且從列1開始)

?7、關閉JDBC對象

?????操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲

?????明順序相反:

?????1、關閉記錄集

?????2、關閉聲明

?????3、關閉連接對象

??????????if(rs?!=?null){???//?關閉記錄集?

????????try{

rs.close()?;

????????}catch(SQLException?e){

e.printStackTrace()?;

}

}

??????????if(stmt?!=?null){???//?關閉聲明?

????????try{

stmt.close()?;

????????}catch(SQLException?e){

e.printStackTrace()?;

}

}

??????????if(conn?!=?null){??//?關閉連接對象?

?????????try{

conn.close()?;

?????????}catch(SQLException?e){

e.printStackTrace()?;

}

??????????}??

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容