




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 概述、安裝、技術(shù)特點(diǎn)等Java簡(jiǎn)介 變量、數(shù)組、控制流程等Java基本語(yǔ)法1 類、接口、繼承等Java基本語(yǔ)法2 JDBC和MySqlJava數(shù)據(jù)庫(kù)Java入門4 Java數(shù)據(jù)庫(kù)技術(shù) 4.1 MySQL和和JDBC4.2 使用使用JDBC 4.3 實(shí)例實(shí)例 4.1 MySQL和和JDBC概述概述MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗下公司。MySQL 最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB 應(yīng)用方面MySQL是最好的 RDBMS (Relational Database Management System,關(guān)
2、系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一,對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能綽綽有余。u 創(chuàng)建數(shù)據(jù)庫(kù)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
3、* from herou 統(tǒng)計(jì)表中有多少條數(shù)據(jù):select count(*) from herou 顯示前5條數(shù)據(jù):select * from hero limit 0,5u 修改:update hero set hp = 818 where id = 1u 刪除:delete from hero where id = 1操作語(yǔ)句4.1 MySQL和和JDBC JDBC(Java Database Connection,Java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的JavaAPI(應(yīng)用程序設(shè)計(jì)接口),它由一些Java語(yǔ)言寫的類和界面組成。JDBC提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使得開(kāi)發(fā)人員
4、使用Java語(yǔ)言開(kāi)發(fā)完整的數(shù)據(jù)庫(kù)應(yīng)用程序變得極為簡(jiǎn)單。通過(guò)JDBC,開(kāi)發(fā)人員幾乎可以將SQL語(yǔ)句傳遞給任何一種數(shù)據(jù)庫(kù),而無(wú)需為各種數(shù)據(jù)庫(kù)編寫單獨(dú)的訪問(wèn)程序。JDBC可以自動(dòng)將SQL語(yǔ)句傳遞給相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)。訪問(wèn)MySQL數(shù)據(jù)庫(kù)需要用到第三方的類,這些第三方的類,都被壓縮在一個(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
5、external jarspackage jdbc; public class 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ù)庫(kù)驅(qū)動(dòng)加載成功 !); catch (ClassNotFoundExce
6、ption e) / TODO Auto-generated catch block e.printStackTrace(); 初始化驅(qū)動(dòng)通過(guò)Class.forName(com.mysql.jdbc.Driver);初始化驅(qū)動(dòng)類com.mysql.jdbc.Driver就在 mysql-connector-java-5.0.8-bin.jar中 JDBC擴(kuò)展了Java的功能,例如在Applet中應(yīng)用JDBC,可以實(shí)現(xiàn)與遠(yuǎn)程數(shù)據(jù)庫(kù)的連接,實(shí)現(xiàn)不同平臺(tái)數(shù)據(jù)庫(kù)之間的對(duì)話。簡(jiǎn)單地說(shuō),JDBC完成下面三個(gè)操作: (1) 與一個(gè)數(shù)據(jù)庫(kù)建立連接。 Connection con = DriverManager
7、.getConnection(jdbc:odbc:CallCenter,sa,); (2) 向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句。 stmt = con.createStatement();rs = stmt.executeQuery(SELECT CID,CPin from tCustomer WHERE CID=z1); (3) 處理數(shù)據(jù)庫(kù)返回的結(jié)果。while(rs.next()String theInt = rs.getString(CID);String str = rs.getString(CPin); .4.2 使使 用用JDBC JDBC的接口分為兩個(gè)層次:一個(gè)是面向程序開(kāi)發(fā)人員的JDBC
8、API;另外一個(gè)是底層的JDBC Driver API。JDBC API 被描述成為一組抽象的Java接口,應(yīng)用程序可以對(duì)某個(gè)數(shù)據(jù)庫(kù)打開(kāi)連接,執(zhí)行SQL語(yǔ)句并且處理結(jié)果。最重要的接口如下: java.sql.DriverManager:處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫(kù)連接提供支持。 java.sql.Connection:代表對(duì)特定數(shù)據(jù)庫(kù)的連接。 java.sql.Statement:代表一個(gè)特定的容器,以對(duì)一個(gè)特定的數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句。 java.sql.ResultSet:控制對(duì)一個(gè)特定語(yǔ)句的行數(shù)據(jù)的存取。 其中java.sql.Statement又有兩個(gè)子類型: (1) java.s
9、ql.PreparedStatement:用于執(zhí)行預(yù)編譯的SQL語(yǔ)句。 (2) java.sql.CallableStatement:用于執(zhí)行對(duì)一個(gè)數(shù)據(jù)庫(kù)內(nèi)嵌過(guò)程的調(diào)用。 JDBC Driver API是指java.sql.Driver接口,封裝了不同數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序(像Access、Foxpro、SQL Server等)。由于它是數(shù)據(jù)庫(kù)底層處理,所以必須提供對(duì)java.sql.Connection、java.sql. Statement、java.sql.PreparedStatement和java.sql.ResultSet的實(shí)現(xiàn)。 package jdbc; import java.sq
10、l.Connection;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ù)庫(kù)的Connection連接 / 這里需要提供: / 數(shù)據(jù)庫(kù)所處于的ip: (本機(jī)) / 數(shù)據(jù)庫(kù)的端口號(hào): 3306 (mysql專用端口號(hào)) / 數(shù)據(jù)庫(kù)名稱 how2java / 編碼方式 UTF-8 / 賬號(hào) roo
11、t / 密碼 admin 連接數(shù)據(jù)庫(kù)/接上面的代碼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
12、-generated catch block e.printStackTrace(); 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語(yǔ)句的,比如增加,刪除
13、 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 e) / TODO A
14、uto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 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(St
15、ring 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語(yǔ)句執(zhí)行成功后,用mysql-front進(jìn)行查看,明確插入成功 Statement s = c.createStatement(); / 準(zhǔn)備sql語(yǔ)句 / 注意: 字符串要用單引號(hào) String sql = insert into
16、hero values(null,+提莫+,+313.0f+,+50+); s.execute(sql); System.out.println(執(zhí)行插入語(yǔ)句成功); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); 執(zhí)行SQL語(yǔ)句之前要確保數(shù)據(jù)庫(kù)test中有表hero的存在,如果沒(méi)有,需要事先創(chuàng)建表在回收垃圾語(yǔ)句后
17、面加上下面語(yǔ)句 finally / 數(shù)據(jù)庫(kù)的連接時(shí)有限資源,相關(guān)操作結(jié)束后,養(yǎng)成關(guān)閉數(shù)據(jù)庫(kù)的好習(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 block e.printStackTrace(); 數(shù)據(jù)庫(kù)
18、的連接是有限資源,相關(guān)操作結(jié)束后,養(yǎng)成關(guān)閉數(shù)據(jù)庫(kù)的好習(xí)慣先關(guān)閉Statement后關(guān)閉Connectionpackage 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); catch (ClassNotFoun
19、dException e) e.printStackTrace(); 使用try-with-resource的方式自動(dòng)關(guān)閉連接 try ( Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); Statement s = c.createStatement(); ) String sql = insert into hero values(null, + 提莫 + , + 313.0f + , + 50 + ); s.ex
20、ecute(sql); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); String 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 where id = 3;增、刪、改語(yǔ)句package jdbc; import java.sql
21、.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 (ClassNotFoundException e) e.printStackTrace(); try (Connection c = D
22、riverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8, root, admin); Statement s = c.createStatement();) executeQuery 執(zhí)行SQL查詢語(yǔ)句 String sql = select * from hero; / 執(zhí)行查詢語(yǔ)句,并把結(jié)果集返回給ResultSet ResultSet rs = s.executeQuery(sql); while (rs.next() int id = rs.getInt(id);/ 可以使用字
23、段名 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 (SQLException e) / TODO Auto-generated catch block e.printStackTrace();
24、 在取第二列的數(shù)據(jù)的時(shí)候,用的是rs.get(2) ,而不是get(1). 這個(gè)是整個(gè)Java自帶的api里唯二唯二的地方package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException; public class TestJDBC public static void main(String args) try Class.forName(com.mysql.jdbc.Driver); cat
25、ch (ClassNotFoundException e) e.printStackTrace(); PreparedStatement也是用來(lái)執(zhí)行sql語(yǔ)句的與創(chuàng)建Statement不同的是,需要根據(jù)sql語(yǔ)句創(chuàng)建PreparedStatement除此之外,還能能夠通過(guò)設(shè)置參數(shù),指定相應(yīng)的值,而不是Statement那樣使用字符串拼接 String sql = insert into hero values(null,?,?,?); try (Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?
26、characterEncoding=UTF-8,root, admin); / 根據(jù)sql語(yǔ)句創(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) / TODO Auto-generated catch block e.printStackTrace(); 使用參數(shù)設(shè)置,可讀性好,不易犯錯(cuò)
27、 有預(yù)編譯機(jī)制,性能比Statement更快 防止SQL注入式攻擊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); catch (ClassNotFoundException e) e.print
28、StackTrace(); try (Connection c = DriverManager.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8,root, admin); Statement s = c.createStatement();) / 有事務(wù)的前提下 / 在事務(wù)中的多個(gè)操作,要么都成功,要么都失敗 使用事務(wù)在事務(wù)中的多個(gè)操作,要么都成功,要么都失敗要么都成功,要么都失敗通過(guò) c.setAutoCommit(false);關(guān)閉自動(dòng)提交關(guān)閉自動(dòng)提交使用 mit();進(jìn)行手動(dòng)提交手動(dòng)提交 c.se
29、tAutoCommit(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)提交 mit(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace
30、(); package 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ù)庫(kù)的映射 簡(jiǎn)單說(shuō),一個(gè)對(duì)象一個(gè)對(duì)象,對(duì)應(yīng)數(shù)據(jù)庫(kù)里的一條記錄一條記錄例:例:根據(jù)id返回一個(gè)Hero對(duì)象先構(gòu)建一個(gè)Hero類package jdbc;import java.sql.Connection;import java.sql.DriverManager;im
31、port 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.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); try (Connection c = DriverMana
32、ger.getConnection(jdbc:mysql:/:3306/test?characterEncoding=UTF-8,root, admin); Statement s = c.createStatement();) String sql = select * from hero where id = + id; ResultSet rs = s.executeQuery(sql); / 因?yàn)閕d是唯一的,ResultSet最多只能有一條記錄 / 所以使用if代替while if (rs.next() hero = new Hero(); String name
33、= 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 block e.printStackTrace(); return hero; public static void main(String args) Hero h = get(22); System.out.p
34、rintln();package 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); /查詢 public List list(); /分頁(yè)查詢 public List list(int start, int count);DAO=Database Access Object 數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象 實(shí)際上就是運(yùn)用了練習(xí)-
35、ORM中的思路,把數(shù)據(jù)庫(kù)相關(guān)的操作都封裝在這個(gè)類里面,其他地方看不到JDBC的代碼package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List; import charactor.Hero;
36、public class HeroDAO 1. 把驅(qū)動(dòng)的初始化放在了構(gòu)造方法HeroDAO里:因?yàn)轵?qū)動(dòng)初始化值需要執(zhí)行一次,所以放在這里更合適,其他方法里也不需要寫了,代碼更簡(jiǎn)潔。2. 提供了一個(gè)getConnection方法返回連接,所有的數(shù)據(jù)庫(kù)操作都需要事先拿到一個(gè)數(shù)據(jù)庫(kù)連接Connection,以前的做法每個(gè)方法里都會(huì)寫一個(gè),如果要改動(dòng)密碼,那么每個(gè)地方都需要修改。 通過(guò)這種方式,只需要修改這一個(gè)地方就可以了。 代碼變得更容易維護(hù),而且也更加簡(jiǎn)潔。 public HeroDAO() try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) e.printStackTrace(); public Conn
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 系統(tǒng)闡述經(jīng)驗(yàn)管理思想
- 哈爾濱九年級(jí)下數(shù)學(xué)試卷
- 針刺板行業(yè)深度研究分析報(bào)告(2024-2030版)
- 志高空調(diào)檢驗(yàn)報(bào)告
- 2025年中國(guó)鉆孔攻牙機(jī)市場(chǎng)競(jìng)爭(zhēng)策略及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2025年中國(guó)存儲(chǔ)部件行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 中國(guó)ETC行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資方向研究報(bào)告
- 2025年中國(guó)建筑五金行業(yè)市場(chǎng)深度研究及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年中國(guó)游泳池?zé)岜眯袠I(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 健康相關(guān)課件圖片
- HF-01型電除塵器高頻電源使用說(shuō)明書(shū)
- 消毒供應(yīng)室??评碚摽荚囶}庫(kù)(單選、多選共500題)
- 城市道路無(wú)障礙設(shè)施課件
- 詢價(jià)單(表格模板)
- QC降低礦山法圍巖隧道爆破超挖量
- 2023年5月FDA口服速釋制劑根據(jù)BCS分類系統(tǒng)的生物利用度與生物等效性研究及生物等效性豁免
- 校園文化建設(shè)方案(共60張PPT)
- 藍(lán)色海洋經(jīng)濟(jì)海事航海漁業(yè)水產(chǎn)養(yǎng)殖港口碼頭海運(yùn)PPT模板
- 不飽和聚酯樹(shù)脂化學(xué)品安全技術(shù)說(shuō)明書(shū)MSDS
- 機(jī)動(dòng)車排放檢驗(yàn)比對(duì)試驗(yàn)報(bào)告
- 一級(jí)二級(jí)三級(jí)醫(yī)養(yǎng)結(jié)合機(jī)構(gòu)服務(wù)質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn)(試行)
評(píng)論
0/150
提交評(píng)論