W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
- 通過(guò)使用JDBC API,Java程序可以非常方便地操作各種主流數(shù)據(jù)庫(kù),這是是Java語(yǔ)言的巨大魅力所在
- 由于Java語(yǔ)言的跨平臺(tái)特性,所以使用JDBC API所編寫(xiě)的程序不僅可以實(shí)現(xiàn)跨數(shù)據(jù)庫(kù),還可以跨平臺(tái),具有非常優(yōu)秀的可移植性
- 程序使用JDBC API以統(tǒng)一的方式來(lái)連接不同的數(shù)據(jù)庫(kù),然后通過(guò)Statement對(duì)象來(lái)執(zhí)行標(biāo)準(zhǔn)SQL語(yǔ)句,并可以獲得SQL語(yǔ)句訪問(wèn)數(shù)據(jù)庫(kù)的結(jié)果
- 1.JDBC驅(qū)動(dòng):稱為JDBC–ODBC橋,這種驅(qū)動(dòng)是最早實(shí)現(xiàn)的JDBC驅(qū)動(dòng)程序,主要目的是為了快速推廣JDBC。這種驅(qū)動(dòng)程序?qū)DBC API映射到ODBC API。JDBC-ODBC也需要驅(qū)動(dòng),這種驅(qū)動(dòng)由Sun公司提供實(shí)現(xiàn)
- 2.JDBC驅(qū)動(dòng):直接將JDBC API映射成數(shù)據(jù)庫(kù)特定的客戶端API。這種驅(qū)動(dòng)程序包含特定數(shù)據(jù)庫(kù)的本地代碼,用于訪問(wèn)特定數(shù)據(jù)庫(kù)的客戶端
- 3.JDBC驅(qū)動(dòng):支持三層結(jié)構(gòu)的JDBC訪問(wèn)方式。主要用于Applet階段,通過(guò)Applet訪問(wèn)數(shù)據(jù)庫(kù)
- 4.JDBC驅(qū)動(dòng):是純Java的,直接與數(shù)據(jù)庫(kù)實(shí)例交互。這種驅(qū)動(dòng)是智能的,它知道數(shù)據(jù)庫(kù)使用的底層協(xié)議,這種驅(qū)動(dòng)是目前最流行的JDBC驅(qū)動(dòng)
- (1)下載MySQL安裝文件
- (2)開(kāi)始安裝MySQL后,在出現(xiàn)的對(duì)話框中單擊“Next”按鈕
- (3)單擊對(duì)話框的“Next”按鈕,將出現(xiàn)選擇安裝組件和安裝路徑的對(duì)話框。
- (4)單擊對(duì)話框中的“Next”按鈕,將可開(kāi)始安裝MySQL數(shù)據(jù)庫(kù)系統(tǒng),安裝成功后,系統(tǒng)還要求配置MySQL數(shù)據(jù)庫(kù)
- (5)配置數(shù)據(jù)庫(kù)時(shí)注意選擇合適的字符集,并設(shè)置密碼
<br> - 查詢數(shù)據(jù)庫(kù):show databases; <br> - 刪除數(shù)據(jù)庫(kù):drop database 數(shù)據(jù)庫(kù)名; <br> - 進(jìn)入數(shù)據(jù)庫(kù):use 數(shù)據(jù)庫(kù)名 <br> - 顯示創(chuàng)建庫(kù)名的所有數(shù)據(jù):show tables; <br> - 輸出表名:desc 表名 <br> SQL語(yǔ)句四大部分 <br> - 數(shù)據(jù)定義語(yǔ)言(DDL):drop、create、alter <br> - 數(shù)據(jù)操作語(yǔ)言(DML):insert、update、delete <br> - 數(shù)據(jù)查詢語(yǔ)言(DQL):select、from、where、group by <br> - 數(shù)據(jù)控制語(yǔ)言(DCL):grant、revoke、commit、rollback <br> ```
- DriverManager
- Connection
- Statement
- PreparedStatement
- ResultSet
- (1)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
- (2)通過(guò)DriverManager獲取數(shù)據(jù)庫(kù)連接
- (3)通過(guò)Connection對(duì)象創(chuàng)建Statement對(duì)象
- (4)使用Statement執(zhí)行SQL語(yǔ)句。所有Statement都有如下三個(gè)方法來(lái)執(zhí)行SQL語(yǔ)句
- (5)操作結(jié)果集。如果執(zhí)行的SQL語(yǔ)句是查詢語(yǔ)句,執(zhí)行結(jié)果將返回一個(gè)ResultSet對(duì)象,該對(duì)象里保存了SQL語(yǔ)句查詢的結(jié)果。程序可以通過(guò)操作該ResultSet對(duì)象來(lái)取出查詢結(jié)果
- 使用executeUpdate執(zhí)行DDL和DML語(yǔ)句
- 使用execute方法執(zhí)行SQL語(yǔ)句
- 使用executeQuery方法執(zhí)行查詢語(yǔ)句
數(shù)據(jù)庫(kù)連接池的解決方案是:當(dāng)應(yīng)用程序啟動(dòng)時(shí),系統(tǒng)主動(dòng)建立足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組成一個(gè)連接池
每次應(yīng)用程序請(qǐng)求數(shù)據(jù)庫(kù)連接時(shí),無(wú)需重新打開(kāi)連接,而是從池中取出已有的連接使用,使用完后,不再關(guān)閉數(shù)據(jù)庫(kù)連接,而是直接將該連接歸還給連接池。通過(guò)使用連接池,將大大提高程序運(yùn)行效率
數(shù)據(jù)庫(kù)連接池的常用參數(shù)有如下:
- 數(shù)據(jù)庫(kù)的初始連接數(shù)
- 連接池的最大連接數(shù)
- 連接池的最小連接數(shù)
- 連接池的每次增加的容量
- DBCP:是Apache軟件基金組織下的開(kāi)源連接池實(shí)現(xiàn),該連接池依賴該組織下的另一個(gè)開(kāi)源系統(tǒng):common-pool
- C3P0:數(shù)據(jù)源性能更勝一籌,Hibernate就推薦使用該連接池
C3P0連接池不僅可自動(dòng)清理不再使用的Connection,還可以自動(dòng)清理Statement和ResultSet
<br> package cn.jdbc; <br> import java.sql.Connection; <br> import java.sql.DriverManager; <br> import java.sql.SQLException; <br> /** <br> * 創(chuàng)建初始化并獲取 <br> */ <br> public class MyJdBc { <br> private static Connection cot = null;//聲明 <br> //靜態(tài)代碼塊 <br> static{ <br> try { <br> Class.forName("com.mysql.jdbc.Driver"); <br> //數(shù)據(jù)庫(kù)名稱,用戶名,密碼 <br> cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqltestdb","root","root"); <br> if(!cot.isClosed()){ <br> System.out.println("數(shù)據(jù)連接成功"); <br> } <br> } catch (ClassNotFoundException e) { <br> e.printStackTrace(); <br> }catch(SQLException e){ <br> e.printStackTrace(); <br> } <br> } <br> public static Connection getInstace(){ <br> return cot;//返回對(duì)象 <br> } <br> } <br> ``` <br> ``` <br> package cn.jdbc; <br> import java.sql.Connection; <br> import java.sql.ResultSet; <br> import java.sql.SQLException; <br> import java.sql.Statement; <br> import java.text.DateFormat; <br> import java.text.ParseException; <br> import java.text.SimpleDateFormat; <br> import java.util.Date; <br> import com.mysql.jdbc.PreparedStatement; <br> /** <br> * JAVA連接JDBC驅(qū)動(dòng)器 <br> * @author JEEP-711 <br> * <br> */ <br> public class JdBc { <br> @SuppressWarnings("unused") <br> public static void main(String[] args) throws SQLException, ParseException { <br> Connection cot = MyJdBc.getInstace();//連接 <br> Statement st = cot.createStatement();//創(chuàng)建Statement類對(duì)象,來(lái)執(zhí)行SQL語(yǔ)句 <br> String sql = "select * from emp";//要執(zhí)行的SQL語(yǔ)句 <br> ResultSet rs = st.executeQuery(sql);//ResultSet類,用來(lái)存放獲取結(jié)果集 <br> System.out.println("-----------------------------------------------"); <br> System.out.println("------------------執(zhí)行結(jié)果如下所示------------------"); <br> System.out.println("-----------------------------------------------"); <br> System.out.println("ID"+"\t"+"姓名"+"\t"+"職稱"+"\t"+"\t時(shí)期"+"\t"+"資金"); <br> System.out.println("-----------------------------------------------"); <br> /** <br> * 查詢 <br> */ <br> String job = null;//職位 <br> String names = null;//姓名 <br> String empon = null;//id號(hào) <br> String hiredate = null;//時(shí)期 <br> String sal = null;//資金 <br> while(rs.next()){ <br> job = rs.getString("job");//獲取表中過(guò)得字段職稱st列數(shù)據(jù) <br> names = rs.getString("ename");//獲取姓名數(shù)據(jù) <br> empon = rs.getString("empon");//獲取ID號(hào) <br> hiredate = rs.getString("hiredate");//獲取時(shí)間時(shí)期 <br> sal = rs.getString("sal");//獲取資金 <br> System.out.println(empon+"\t"+names+"\t"+job+"\t"+hiredate+"\t"+sal);//輸出結(jié)果 <br> /** <br> * 添加數(shù)據(jù) <br> */ <br> PreparedStatement pl; <br> ResultSet res; <br> //預(yù)處理添加數(shù)據(jù),其中有兩個(gè)參數(shù)--"?" <br> pl = (PreparedStatement) cot.prepareStatement("insert into emp (empon,ename,job,hiredate,sal)"+ <br> "values(?,?,?,?,?)"); <br> pl.setInt(1, 3211);//設(shè)置參數(shù)為1,id為3212 <br> pl.setString(2, "王剛");//設(shè)置參數(shù)為2,name為王剛 <br> pl.setString(3, "總裁");//設(shè)置參數(shù)3,職位為總裁 <br> DateFormat df2 = new SimpleDateFormat("yyy-MM-dd"); <br> Date myDate2 = df2.parse("2010-09-13"); <br> pl.setDate(4, new java.sql.Date(myDate2.getTime())); <br> pl.setFloat(5, (float)2000.3); <br> pl.executeUpdate();//實(shí)行更新 <br> /** <br> * 更新數(shù)據(jù) <br> */ <br> //PreparedStatement gx; <br> //預(yù)處理更新(修改)數(shù)據(jù),將王剛的sal修改為5000.00 <br> pl = (PreparedStatement) cot.prepareStatement("update emp set sal = ? where ename = ?"); <br> pl.setFloat(1,(float) 5000.00); <br> pl.setString(2, "王剛"); <br> pl.executeUpdate();//實(shí)行修改 <br> /** <br> * 刪除數(shù)據(jù) <br> */ <br> //PreparedStatement sc; <br> //預(yù)處理刪除數(shù)據(jù) <br> pl = (PreparedStatement) cot.prepareStatement("delete from emp where sal & ?"); <br> pl.setFloat(1, 4500); <br> pl.executeUpdate();//實(shí)行刪除 <br> pl.close();//關(guān)閉 <br> } <br> rs.close();//關(guān)閉 <br> cot.close();//關(guān)閉 <br> } catch (ClassNotFoundException e) { <br> System.out.println("數(shù)據(jù)庫(kù)驅(qū)動(dòng)異常");//數(shù)據(jù)庫(kù)驅(qū)動(dòng)類異常處理 <br> e.printStackTrace(); <br> } catch (SQLException e) { <br> System.out.println("數(shù)據(jù)庫(kù)連接失敗");//數(shù)據(jù)庫(kù)連接失敗異常處理 <br> e.printStackTrace(); <br> } catch (Exception e) { <br> e.printStackTrace(); <br> }finally{ <br> System.out.println("數(shù)據(jù)庫(kù)數(shù)據(jù)成功獲取!"); <br> } <br> } <br> } <br> ```
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: