創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫的程序,包含7個(gè)步驟: \x0d\x0a 1、加載JDBC驅(qū)動(dòng)程序: \x0d\x0a 在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅(qū)動(dòng)到JVM(Java虛擬機(jī)), \x0d\x0a 這通過java.lang.Class類的靜態(tài)方法forName(String className)實(shí)現(xiàn)。 \x0d\x0a 例如: \x0d\x0a try{ \x0d\x0a //加載MySql的驅(qū)動(dòng)類 \x0d\x0a Class.forName("com.mysql.jdbc.Driver") ; \x0d\x0a }catch(ClassNotFoundException e){ \x0d\x0a System.out.println("找不到驅(qū)動(dòng)程序類 ,加載驅(qū)動(dòng)失?。?); \x0d\x0a e.printStackTrace() ; \x0d\x0a } \x0d\x0a 成功加載后,會(huì)將Driver類的實(shí)例注冊(cè)到DriverManager類中。 \x0d\x0a 2、提供JDBC連接的URL \x0d\x0a ?連接URL定義了連接數(shù)據(jù)庫時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。 \x0d\x0a ?書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標(biāo)識(shí) \x0d\x0a 協(xié)議:在JDBC中總是以jdbc開始 \x0d\x0a 子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫管理系統(tǒng)名稱。 \x0d\x0a 數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫來源的地址與連接端口。 \x0d\x0a 例如:(MySql的連接URL) \x0d\x0a jdbc:mysql: \x0d\x0a //localhost:3306/test?useUnicode=truecharacterEncoding=gbk ; \x0d\x0a useUnicode=true:表示使用Unicode字符集。如果characterEncoding設(shè)置為 \x0d\x0a gb2312或GBK,本參數(shù)必須設(shè)置為true 。characterEncoding=gbk:字符編碼方式。 \x0d\x0a 3、創(chuàng)建數(shù)據(jù)庫的連接 \x0d\x0a ?要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象, \x0d\x0a 該對(duì)象就代表一個(gè)數(shù)據(jù)庫的連接。 \x0d\x0a ?使用DriverManager的getConnectin(String url , String username , \x0d\x0a String password )方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和 \x0d\x0a 密碼來獲得。 \x0d\x0a 例如: \x0d\x0a //連接MySql數(shù)據(jù)庫,用戶名和密碼都是root \x0d\x0a String url = "jdbc:mysql://localhost:3306/test" ; \x0d\x0a String username = "root" ; \x0d\x0a String password = "root" ; \x0d\x0a try{ \x0d\x0a Connection con = \x0d\x0a DriverManager.getConnection(url , username , password ) ; \x0d\x0a }catch(SQLException se){ \x0d\x0a System.out.println("數(shù)據(jù)庫連接失敗!"); \x0d\x0a se.printStackTrace() ; \x0d\x0a } \x0d\x0a 4、創(chuàng)建一個(gè)Statement \x0d\x0a ?要執(zhí)行SQL語句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3 \x0d\x0a 種類型: \x0d\x0a 1、執(zhí)行靜態(tài)SQL語句。通常通過Statement實(shí)例實(shí)現(xiàn)。 \x0d\x0a 2、執(zhí)行動(dòng)態(tài)SQL語句。通常通過PreparedStatement實(shí)例實(shí)現(xiàn)。 \x0d\x0a 3、執(zhí)行數(shù)據(jù)庫存儲(chǔ)過程。通常通過CallableStatement實(shí)例實(shí)現(xiàn)。 \x0d\x0a 具體的實(shí)現(xiàn)方式: \x0d\x0a Statement stmt = con.createStatement() ; \x0d\x0a PreparedStatement pstmt = con.prepareStatement(sql) ; \x0d\x0a CallableStatement cstmt = \x0d\x0a con.prepareCall("{CALL demoSp(? , ?)}") ; \x0d\x0a 5、執(zhí)行SQL語句 \x0d\x0a Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery 、executeUpdate \x0d\x0a 和execute \x0d\x0a 1、ResultSet executeQuery(String sqlString):執(zhí)行查詢數(shù)據(jù)庫的SQL語句 \x0d\x0a ,返回一個(gè)結(jié)果集(ResultSet)對(duì)象。 \x0d\x0a 2、int executeUpdate(String sqlString):用于執(zhí)行INSERT、UPDATE或 \x0d\x0a DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等 \x0d\x0a 3、execute(sqlString):用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的 \x0d\x0a 語句。 \x0d\x0a 具體實(shí)現(xiàn)的代碼: \x0d\x0a ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; \x0d\x0a int rows = stmt.executeUpdate("INSERT INTO ...") ; \x0d\x0a boolean flag = stmt.execute(String sql) ; \x0d\x0a 6、處理結(jié)果 \x0d\x0a 兩種情況: \x0d\x0a 1、執(zhí)行更新返回的是本次操作影響到的記錄數(shù)。 \x0d\x0a 2、執(zhí)行查詢返回的結(jié)果是一個(gè)ResultSet對(duì)象。 \x0d\x0a ? ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對(duì)這些 \x0d\x0a 行中數(shù)據(jù)的訪問。 \x0d\x0a ? 使用結(jié)果集(ResultSet)對(duì)象的訪問方法獲取數(shù)據(jù): \x0d\x0a while(rs.next()){ \x0d\x0a String name = rs.getString("name") ; \x0d\x0a String pass = rs.getString(1) ; // 此方法比較高效 \x0d\x0a } \x0d\x0a (列是從左到右編號(hào)的,并且從列1開始) \x0d\x0a 7、關(guān)閉JDBC對(duì)象 \x0d\x0a 操作完成以后要把所有使用的JDBC對(duì)象全都關(guān)閉,以釋放JDBC資源,關(guān)閉順序和聲 \x0d\x0a 明順序相反: \x0d\x0a 1、關(guān)閉記錄集 \x0d\x0a 2、關(guān)閉聲明 \x0d\x0a 3、關(guān)閉連接對(duì)象 \x0d\x0a if(rs != null){ // 關(guān)閉記錄集 \x0d\x0a try{ \x0d\x0a rs.close() ; \x0d\x0a }catch(SQLException e){ \x0d\x0a e.printStackTrace() ; \x0d\x0a } \x0d\x0a } \x0d\x0a if(stmt != null){ // 關(guān)閉聲明 \x0d\x0a try{ \x0d\x0a stmt.close() ; \x0d\x0a }catch(SQLException e){ \x0d\x0a e.printStackTrace() ; \x0d\x0a } \x0d\x0a } \x0d\x0a if(conn != null){ // 關(guān)閉連接對(duì)象 \x0d\x0a try{ \x0d\x0a conn.close() ; \x0d\x0a }catch(SQLException e){ \x0d\x0a e.printStackTrace() ; \x0d\x0a } \x0d\x0a }
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括江陵網(wǎng)站建設(shè)、江陵網(wǎng)站制作、江陵網(wǎng)頁制作以及江陵網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,江陵網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到江陵省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
注冊(cè)驅(qū)動(dòng)
Class.forname("com.mysql.jdbc.Driver");//這是連接mysql數(shù)據(jù)庫的驅(qū)動(dòng)
獲取數(shù)據(jù)庫連接
java.sql.Connection conn=java.sql.DriverManager.getConnection(); 3.獲取表達(dá)式
java.sql.Statement ?stmt=conn.createStatement("jdbc:mysql://localhost/test?
useUnicode=truecharacterEncoding=GBK","root","null");//三個(gè)參數(shù)分別是數(shù)據(jù)庫連接的URL,
用戶名,密碼 4.執(zhí)行SQL
java.sql.ResultSet ? rs=stmt.executeQuery("select * from user"); 5.顯示結(jié)果集里面的數(shù)據(jù)
while(rs.next()){
System.out.println(rs.getInt(1));
System.out.println(rs.getString("username"));
System.out.println(rs.getString("password"));
System.out.pringln();
}//執(zhí)行插入語句
//stmt.executeUpdate("insert into user values(1,'中文','345')");
釋放資源
rs.close();
stmt.close();
conn.close();
JDBC的四部曲:
* 第一步 a)加載對(duì)應(yīng)的驅(qū)動(dòng)程序(首先確保將對(duì)應(yīng)的驅(qū)動(dòng)程序的jar包導(dǎo)入到項(xiàng)目中)
*/
Class.forName("com.mysql.jdbc.Driver");
/*
* 第一步 b)根據(jù)已經(jīng)加載的驅(qū)動(dòng)程序 利用相應(yīng)的參數(shù) 獲取數(shù)據(jù)庫的指定連接
*/
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myxjgs", "root", "root");
/*
* 第二步 根據(jù)已經(jīng)獲取的連接對(duì)象 得到查詢窗口的對(duì)象
*/
Statement st = conn.createStatement();
/*
* 第三步 寫并且在statement執(zhí)行sql語句
*/
int i = st.executeUpdate(sql.toString());
/*
* 第四步 根據(jù)執(zhí)行結(jié)果處理返回值
*/
if(i != 0){
flag = true;
}
————————————————
版權(quán)聲明:本文為CSDN博主「peihong19900420」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接: