




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、整理課件1整理課件2Java入門整理課件34 Java數(shù)據(jù)庫技術(shù) 4.1 MySQL和和JDBC4.2 使用使用JDBC 4.3 實(shí)例實(shí)例 整理課件44.1 MySQL和和JDBC概述概述MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于Oracle旗下公司。MySQL 最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在 WEB 應(yīng)用方面MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一,對(duì)于一般的個(gè)人使用者和中小型企業(yè)來說,MySQL提供的功能綽綽有余。整理課件5u
2、 創(chuàng)建數(shù)據(jù)庫test: create database testu 創(chuàng)建表hero:CREATE TABLE hero ( id int(11) AUTO_INCREMENT, name varchar(30) , hp float , damage int(11) , PRIMARY KEY (id) DEFAULT CHARSET=utf8;u 插入一條記錄蓋倫到表中:insert into hero values (null, 蓋倫, 616, 100)u 查詢所有數(shù)據(jù):select * from herou 統(tǒng)計(jì)表中有多少條數(shù)據(jù):select count(*) from herou 顯
3、示前5條數(shù)據(jù):select * from hero limit 0,5u 修改:update hero set hp = 818 where id = 1u 刪除:delete from hero where id = 1操作語句整理課件64.1 MySQL和和JDBC JDBC(Java Database Connection,Java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI(應(yīng)用程序設(shè)計(jì)接口),它由一些Java語言寫的類和界面組成。JDBC提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使得開發(fā)人員使用Java語言開發(fā)完整的數(shù)據(jù)庫應(yīng)用程序變得極為簡單。通過JDBC,開發(fā)人員幾乎可以將SQL語
4、句傳遞給任何一種數(shù)據(jù)庫,而無需為各種數(shù)據(jù)庫編寫單獨(dú)的訪問程序。JDBC可以自動(dòng)將SQL語句傳遞給相應(yīng)的數(shù)據(jù)庫管理系統(tǒng)。整理課件7訪問MySQL數(shù)據(jù)庫需要用到第三方的類,這些第三方的類,都被壓縮在一個(gè)叫做Jar的文件里。為了代碼能夠使用第三方的類,需要為項(xiàng)目導(dǎo)入mysql的專用Jar包。mysql-connector-java-5.0.8-bin.jar通常都會(huì)把項(xiàng)目用到的jar包統(tǒng)一放在項(xiàng)目的lib目錄下導(dǎo)包步驟: 右鍵project-property-java build path-libaries-add external jars整理課件8package jdbc; public cla
5、ss TestJDBC public static void main(String args) /初始化驅(qū)動(dòng) try /驅(qū)動(dòng)類com.mysql.jdbc.Driver /就在 mysql-connector-java-5.0.8-bin.jar中 /如果忘記了第一個(gè)步驟的導(dǎo)包,就會(huì)拋出ClassNotFoundException Class.forName(com.mysql.jdbc.Driver); System.out.println(數(shù)據(jù)庫驅(qū)動(dòng)加載成功 !); catch (ClassNotFoundException e) / TODO Auto-generated catch
6、block e.printStackTrace(); 初始化驅(qū)動(dòng)通過Class.forName(com.mysql.jdbc.Driver);初始化驅(qū)動(dòng)類com.mysql.jdbc.Driver就在 mysql-connector-java-5.0.8-bin.jar中整理課件9 JDBC擴(kuò)展了Java的功能,例如在Applet中應(yīng)用JDBC,可以實(shí)現(xiàn)與遠(yuǎn)程數(shù)據(jù)庫的連接,實(shí)現(xiàn)不同平臺(tái)數(shù)據(jù)庫之間的對(duì)話。簡單地說,JDBC完成下面三個(gè)操作: (1) 與一個(gè)數(shù)據(jù)庫建立連接。 Connection con = DriverManager.getConnection(jdbc:odbc:CallCen
7、ter,sa,); (2) 向數(shù)據(jù)庫發(fā)送SQL語句。 stmt = con.createStatement();rs = stmt.executeQuery(SELECT CID,CPin from tCustomer WHERE CID=z1); 整理課件10(3) 處理數(shù)據(jù)庫返回的結(jié)果。while(rs.next()String theInt = rs.getString(CID);String str = rs.getString(CPin); .整理課件114.2 使使 用用JDBC JDBC的接口分為兩個(gè)層次:一個(gè)是面向程序開發(fā)人員的JDBC API;另外一個(gè)是底層的JDBC Dri
8、ver API。JDBC API 被描述成為一組抽象的Java接口,應(yīng)用程序可以對(duì)某個(gè)數(shù)據(jù)庫打開連接,執(zhí)行SQL語句并且處理結(jié)果。最重要的接口如下: java.sql.DriverManager:處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫連接提供支持。 java.sql.Connection:代表對(duì)特定數(shù)據(jù)庫的連接。 java.sql.Statement:代表一個(gè)特定的容器,以對(duì)一個(gè)特定的數(shù)據(jù)庫執(zhí)行SQL語句。 java.sql.ResultSet:控制對(duì)一個(gè)特定語句的行數(shù)據(jù)的存取。整理課件12 其中java.sql.Statement又有兩個(gè)子類型: (1) java.sql.PreparedSta
9、tement:用于執(zhí)行預(yù)編譯的SQL語句。 (2) java.sql.CallableStatement:用于執(zhí)行對(duì)一個(gè)數(shù)據(jù)庫內(nèi)嵌過程的調(diào)用。 JDBC Driver API是指java.sql.Driver接口,封裝了不同數(shù)據(jù)庫的驅(qū)動(dòng)程序(像Access、Foxpro、SQL Server等)。由于它是數(shù)據(jù)庫底層處理,所以必須提供對(duì)java.sql.Connection、java.sql. Statement、java.sql.PreparedStatement和java.sql.ResultSet的實(shí)現(xiàn)。整理課件13 package jdbc; import java.sql.Connec
10、tion;import java.sql.DriverManager;import java.sql.SQLException; public class TestJDBC public static void main(String args) try Class.forName(com.mysql.jdbc.Driver); / 建立與數(shù)據(jù)庫的Connection連接 / 這里需要提供: / 數(shù)據(jù)庫所處于的ip: (本機(jī)) / 數(shù)據(jù)庫的端口號(hào): 3306 (mysql專用端口號(hào)) / 數(shù)據(jù)庫名稱 how2java / 編碼方式 UTF-8 / 賬號(hào) root / 密碼 a
11、dmin 連接數(shù)據(jù)庫整理課件14/接上面的代碼Connection c = DriverManager.getConnection( jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); System.out.println(連接成功,獲取連接對(duì)象: + c); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-g
12、enerated catch block e.printStackTrace(); 整理課件15 package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement; public class TestJDBC public static void main(String args) try Class.forName(com.mysql.jdbc.Driver); Statement是用于執(zhí)行SQL語句的,比如
13、增加,刪除整理課件16 Connection c = DriverManager.getConnection( jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); / 注意:使用的是 java.sql.Statement / 不要不小心使用到: com.mysql.jdbc.Statement; Statement s = c.createStatement(); System.out.println(獲取 Statement對(duì)象: + s); catch (ClassNotFoundException
14、e) / TODO Auto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 整理課件17 package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement; public class TestJDBC public s
15、tatic void main(String args) try Class.forName(com.mysql.jdbc.Driver); Connection c = DriverManager .getConnection( jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); s.execute執(zhí)行sql語句執(zhí)行成功后,用mysql-front進(jìn)行查看,明確插入成功整理課件18 Statement s = c.createStatement(); / 準(zhǔn)備sql語句 / 注意: 字符串要用單引號(hào) S
16、tring sql = insert into hero values(null,+提莫+,+313.0f+,+50+); s.execute(sql); System.out.println(執(zhí)行插入語句成功); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 執(zhí)行SQL語句之前要確保數(shù)據(jù)庫test中有表hero
17、的存在,如果沒有,需要事先創(chuàng)建表整理課件19在回收垃圾語句后面加上下面語句 finally / 數(shù)據(jù)庫的連接時(shí)有限資源,相關(guān)操作結(jié)束后,養(yǎng)成關(guān)閉數(shù)據(jù)庫的好習(xí)慣 / 先關(guān)閉Statement if (s != null) try s.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); / 后關(guān)閉Connection if (c != null) try c.close(); catch (SQLException e) / TODO Auto-generated catch
18、block e.printStackTrace(); 數(shù)據(jù)庫的連接是有限資源,相關(guān)操作結(jié)束后,養(yǎng)成關(guān)閉數(shù)據(jù)庫的好習(xí)慣先關(guān)閉Statement后關(guān)閉Connection整理課件20package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement; public class TestJDBC public static void main(String args) try Class.forName(com.mys
19、ql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); 使用try-with-resource的方式自動(dòng)關(guān)閉連接整理課件21 try ( Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); Statement s = c.createStatement(); ) String sql = insert into hero values(
20、null, + 提莫 + , + 313.0f + , + 50 + ); s.execute(sql); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 整理課件22String sql = insert into hero values(null, + 提莫 + , + 313.0f + , + 50 + );String sql = delete from hero where id = 5; String sql = update hero set name = name 5 w
21、here id = 3;增、刪、改語句整理課件23package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; public class TestJDBC public static void main(String args) try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundE
22、xception e) e.printStackTrace(); try (Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); Statement s = c.createStatement();) executeQuery 執(zhí)行SQL查詢語句整理課件24 String sql = select * from hero; / 執(zhí)行查詢語句,并把結(jié)果集返回給ResultSet ResultSet rs = s.execut
23、eQuery(sql); while (rs.next() int id = rs.getInt(id);/ 可以使用字段名 String name = rs.getString(2);/ 也可以使用字段的順序 float hp = rs.getFloat(hp); int damage = rs.getInt(4); System.out.printf(%dt%st%ft%d%n, id, name, hp, damage); / 不一定要在這里關(guān)閉ReultSet,因?yàn)镾tatement關(guān)閉的時(shí)候,會(huì)自動(dòng)關(guān)閉ResultSet / rs.close(); catch (SQLExcepti
24、on e) / TODO Auto-generated catch block e.printStackTrace(); 在取第二列的數(shù)據(jù)的時(shí)候,用的是rs.get(2) ,而不是get(1). 這個(gè)是整個(gè)Java自帶的api里唯二唯二的地方整理課件25package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException; public class TestJDBC public static vo
25、id main(String args) try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); PreparedStatement也是用來執(zhí)行sql語句的與創(chuàng)建Statement不同的是,需要根據(jù)sql語句創(chuàng)建PreparedStatement除此之外,還能能夠通過設(shè)置參數(shù),指定相應(yīng)的值,而不是Statement那樣使用字符串拼接整理課件26 String sql = insert into hero values(null,?,?,?); try (Con
26、nection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8,root, admin); / 根據(jù)sql語句創(chuàng)建PreparedStatement PreparedStatement ps = c.prepareStatement(sql); ) / 設(shè)置參數(shù) ps.setString(1, 提莫); ps.setFloat(2, 313.0f); ps.setInt(3, 50); / 執(zhí)行 ps.execute(); catch (SQLException e)
27、 / TODO Auto-generated catch block e.printStackTrace(); 使用參數(shù)設(shè)置,可讀性好,不易犯錯(cuò) 有預(yù)編譯機(jī)制,性能比Statement更快 防止SQL注入式攻擊整理課件27package jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement; public class TestJDBC public static void main(String args) try
28、Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); try (Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8,root, admin); Statement s = c.createStatement();) / 有事務(wù)的前提下 / 在事務(wù)中的多個(gè)操作,要么都成功,要么都失敗 使用事務(wù)在事務(wù)中的多個(gè)操作,要么都成功,
29、要么都失敗要么都成功,要么都失敗通過 c.setAutoCommit(false);關(guān)閉自動(dòng)提交關(guān)閉自動(dòng)提交使用 mit();進(jìn)行手動(dòng)提交手動(dòng)提交整理課件28 c.setAutoCommit(false); / 加血的SQL String sql1 = update hero set hp = hp +1 where id = 22; s.execute(sql1); / 減血的SQL / 不小心寫錯(cuò)寫成了 updata(而非update) String sql2 = updata hero set hp = hp -1 where id = 22; s.execute(sql2); / 手動(dòng)
30、提交 mit(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 整理課件29package charactor; public class Hero /增加id屬性 public int id; public String name; public float hp; public int damage; ORM=Object Relationship Database Mapping對(duì)象和關(guān)系數(shù)據(jù)庫的映射 簡單說,一個(gè)對(duì)象一個(gè)對(duì)象,對(duì)應(yīng)數(shù)據(jù)庫里的一條記錄一條記錄例:例:根據(jù)id返回
31、一個(gè)Hero對(duì)象先構(gòu)建一個(gè)Hero類整理課件30package jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; import charactor.Hero; public class TestJDBC public static Hero get(int id) Hero hero = null; try Class.forName(com.mysql.jd
32、bc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); try (Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8,root, admin); Statement s = c.createStatement();) String sql = select * from hero where id = + id; 整理課件31 ResultSet rs = s.execute
33、Query(sql); / 因?yàn)閕d是唯一的,ResultSet最多只能有一條記錄 / 所以使用if代替while if (rs.next() hero = new Hero(); String name = rs.getString(2); float hp = rs.getFloat(hp); int damage = rs.getInt(4); = name; hero.hp = hp; hero.damage = damage; hero.id = id; catch (SQLException e) / TODO Auto-generated catch bloc
34、k e.printStackTrace(); return hero; public static void main(String args) Hero h = get(22); System.out.println();整理課件32package jdbc;import java.util.List; public interface DAO /增加 public void add(T t); /修改 public void update(T t); /刪除 public void delete(int id); /獲取 public T get(int id); /查詢 pu
35、blic List list(); /分頁查詢 public List list(int start, int count);DAO=Database Access Object 數(shù)據(jù)庫訪問對(duì)象 實(shí)際上就是運(yùn)用了練習(xí)-ORM中的思路,把數(shù)據(jù)庫相關(guān)的操作都封裝在這個(gè)類里面,其他地方看不到JDBC的代碼整理課件33package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.s
36、ql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List; import charactor.Hero; public class HeroDAO 把驅(qū)動(dòng)的初始化放在了構(gòu)造方法HeroDAO里:因?yàn)轵?qū)動(dòng)初始化值需要執(zhí)行一次,所以放在這里更合適,其他方法里也不需要寫了,代碼更簡潔。提供了一個(gè)getConnection方法返回連接,所有的數(shù)據(jù)庫操作都需要事先拿到一個(gè)數(shù)據(jù)庫連接Connection,以前的做法每個(gè)方法里都會(huì)寫一個(gè),如果要改動(dòng)密碼,那么每個(gè)地方都需要修改。 通過這種方式,只需要修改這一個(gè)地方就可以了。 代碼變得更容易維護(hù),而且也更加簡潔。整理課件34 public HeroDAO() try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); public Conn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程質(zhì)量管理流程標(biāo)準(zhǔn)化方案
- 陜西省西安市新城區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 投資理財(cái)借款合同
- 城市公園建設(shè)與管理合作協(xié)議
- 教育培訓(xùn)領(lǐng)域在線教育平臺(tái)內(nèi)容優(yōu)化策略研究
- 客戶關(guān)系管理解決方案實(shí)施報(bào)告
- 農(nóng)業(yè)產(chǎn)業(yè)鏈延伸作業(yè)指導(dǎo)書
- 干砌擋土墻現(xiàn)場質(zhì)量檢驗(yàn)報(bào)告單
- 國際貿(mào)易術(shù)語題庫
- 院感知識(shí)崗前培訓(xùn)
- 品管圈PDCA案例-介入中心提高手術(shù)患者交接記錄書寫合格率醫(yī)院品質(zhì)管理成果匯報(bào)
- 第十七屆山東省職業(yè)院校技能大賽中職組“西式烹飪”賽項(xiàng)規(guī)程
- 華東師范大學(xué)《外國人文經(jīng)典(下)》2022-2023學(xué)年第一學(xué)期期末試卷
- 儲(chǔ)能電池模組PACK和系統(tǒng)集成項(xiàng)目可行性研究報(bào)告
- 2024年安徽省公務(wù)員錄用考試《行測(cè)》真題及解析
- 2024年陜西省中考數(shù)學(xué)試題含答案
- 牙慢性損傷-楔狀缺損
- JTJ034-2000 公路路面基層施工技術(shù)規(guī)范
- 2024-2030年中國光伏建筑一體化(BIPV)市場規(guī)模預(yù)測(cè)與競爭格局分析研究報(bào)告
- 零售業(yè)視覺營銷與商品展示技巧考核試卷
- 民營醫(yī)院并購合同范本
評(píng)論
0/150
提交評(píng)論