




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java編程基礎(chǔ)知識(shí)簡(jiǎn)要回顧:面向?qū)ο缶幊痰幕靖拍顑深?lèi)基本的Java程序編寫(xiě)及運(yùn)行方式Java語(yǔ)言的語(yǔ)法結(jié)構(gòu)在Java中如何定義類(lèi)( 關(guān)鍵:修飾符的使用) 在Java中如何實(shí)現(xiàn)繼承與多態(tài)如何利用系統(tǒng)提供的工具類(lèi)如何設(shè)計(jì)圖形用戶界面(關(guān)鍵:將控件的響應(yīng)與類(lèi)的方法聯(lián)系起來(lái))淮海工學(xué)院 計(jì)算機(jī)課程第7章 JAVA高級(jí)編程7.1 Java的數(shù)據(jù)庫(kù)編程(重點(diǎn))7.2 輸入輸出流和文件處理7.3 Java的多線程機(jī)制(難點(diǎn))7.4 Java的網(wǎng)絡(luò)編程7.5 Java的多媒體技術(shù) 淮海工學(xué)院 計(jì)算機(jī)課程學(xué)習(xí)要求掌握J(rèn)ava數(shù)據(jù)庫(kù)編程的基本技術(shù)-Jdbc 理解流的概念,掌握在Java中進(jìn)行文件讀、寫(xiě)操作的方
2、法理解Java的多線程機(jī)制了解Java網(wǎng)絡(luò)編程的一般原理 了解Java多媒體技術(shù)的基本知識(shí) 淮海工學(xué)院 計(jì)算機(jī)課程程序中數(shù)據(jù)的存儲(chǔ)方法有:?jiǎn)蝹€(gè)、臨時(shí)的:變量多個(gè)、同類(lèi)型、臨時(shí)的(退出即消失):數(shù)組多個(gè)、不同類(lèi)型、臨時(shí)的:向量思考:若Java應(yīng)用程序中需要用到大量的數(shù)據(jù),或需要長(zhǎng)久保留的數(shù)據(jù),或需要進(jìn)行反復(fù)查詢、 統(tǒng)計(jì)、維護(hù)等操作的數(shù)據(jù),該用什么方式進(jìn)行存儲(chǔ)和調(diào)用更有效呢?淮海工學(xué)院 計(jì)算機(jī)課程數(shù)據(jù)庫(kù)編程基礎(chǔ)知識(shí)(1) 數(shù)據(jù)設(shè)計(jì)常識(shí)(2) Java數(shù)據(jù)類(lèi)型與數(shù)據(jù)表中的字段對(duì)應(yīng)(3) 創(chuàng)建數(shù)據(jù)源(ODBC)(4) 常用的數(shù)據(jù)庫(kù)操作SQL語(yǔ)句 淮海工學(xué)院 計(jì)算機(jī)課程(1)數(shù)據(jù)庫(kù)設(shè)計(jì)常識(shí)u 常用數(shù)據(jù)庫(kù)
3、管理系統(tǒng)微軟: Access(桌面數(shù)據(jù)庫(kù),小型應(yīng)用,新版2010 )微軟: SQL Server (大、中、小型應(yīng)用,新版2005 )甲骨文:Oracle(大型應(yīng)用,新版 11g )u 數(shù)據(jù)庫(kù)設(shè)計(jì)原則 規(guī)范化滿足第三范式,將多對(duì)多(m:n)關(guān)系轉(zhuǎn)化為2個(gè)各一對(duì)多(1: m ) 和(1:n)關(guān)系 數(shù)據(jù)冗余盡量減少數(shù)據(jù)重復(fù)VS空間換時(shí)間 字段數(shù)據(jù)類(lèi)型恰當(dāng),長(zhǎng)度夠用且不浪費(fèi) 淮海工學(xué)院 計(jì)算機(jī)課程 一個(gè)記錄學(xué)生成績(jī)的數(shù)據(jù)表學(xué)號(hào)姓名性別課程號(hào)課程名學(xué)時(shí)學(xué)分成績(jī)11011S01C+80578張桂男張桂如何男避 免S:021101164485數(shù)據(jù)結(jié)構(gòu)張插桂入/更男新 重S復(fù)03、11011Java6447
4、5刪除異常?11012S01C+80585李云女11012S0264485李云女?dāng)?shù)據(jù)結(jié)構(gòu)11013S01C+80556楊彬男11014S04UML32290吳霞女11013S03Java64475楊彬男添加楊彬java成績(jī):加全信息刪除UML課C+學(xué)時(shí)改為64:多處淮海工學(xué)程院:計(jì)吳算霞機(jī)被課程 如何改進(jìn)設(shè)計(jì)庫(kù)設(shè)計(jì)? 成績(jī)表1:mm:n 課程表1:n 淮海工學(xué)院 計(jì)算機(jī)課程課程號(hào)課程名學(xué)時(shí)學(xué)分S01C+805S02數(shù)據(jù)結(jié)構(gòu)644S03Java644S04UML322學(xué)號(hào)課程號(hào)成績(jī)11011S017811011S028511011S037511012S018511012S028511013S01
5、5611014S049011013S0375學(xué)生表學(xué)號(hào)姓名性別11011張桂男11012李云女11013楊彬男11014吳霞女 (2)Java數(shù)據(jù)類(lèi)型與數(shù)據(jù)表中的字段對(duì)應(yīng)、 淮海工學(xué)院 計(jì)算機(jī)課程數(shù)據(jù)庫(kù)字符類(lèi)屬性數(shù)值類(lèi)屬性Access文本( char 、 String) 數(shù)字(int、long、float double)其中“字節(jié)”只可數(shù)字SQLServerchar字母占1位漢字占2位int 、bigintvarcharsmallint、tinyintnchar字母占1位漢字占1位floatnvarcharnumericText ntext保存不定長(zhǎng)字符串?dāng)?shù)據(jù)real char、varchar
6、、text和nchar、nvarchar、ntext辨析char和varchar的長(zhǎng)度都在1到8000之間;它們的區(qū)別在于char是定長(zhǎng)字符數(shù)據(jù),而varchar 是變長(zhǎng)字符數(shù)據(jù);所謂定長(zhǎng)就是長(zhǎng)度固定的,當(dāng)輸入的數(shù)據(jù)長(zhǎng)度沒(méi) 有達(dá)到指定的長(zhǎng)度時(shí)將自動(dòng)以英文空格在其后面 填充,使長(zhǎng)度達(dá)到相應(yīng)的長(zhǎng)度;而變長(zhǎng)字符數(shù)據(jù)則不會(huì)以空格填充;text存儲(chǔ)可變長(zhǎng)度的非Unicode數(shù)據(jù),最大長(zhǎng)度為231-1(2,147,483,647)個(gè)字符。 淮海工學(xué)院 計(jì)算機(jī)課程后面三種多了個(gè)字母“n”,它表示存儲(chǔ)的是Unicode數(shù)據(jù)類(lèi)型的字符。它所有的字符都用兩個(gè) 字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。nchar、n
7、varchar的長(zhǎng)度是在1到4000之間。和char、varchar比較:nchar、nvarchar則最多存 儲(chǔ)4000個(gè)字符,不論是英文還是漢字;而char、varchar最多能存儲(chǔ)8000個(gè)英文,4000個(gè)漢字??梢钥闯鍪褂胣char、nvarchar數(shù)據(jù)類(lèi)型時(shí)不用擔(dān) 心輸入的字符是英文還是漢字,較為方便,但在存儲(chǔ)英文時(shí)數(shù)量上有些損失。 淮海工學(xué)院 計(jì)算機(jī)課程淮海工學(xué)院 計(jì)算機(jī)課程淮海工學(xué)院 計(jì)算機(jī)課程(3)創(chuàng)建數(shù)據(jù)源以ACCESS為例任務(wù)欄“開(kāi)始” 設(shè)置控制面板管理工具數(shù)據(jù)源(ODBC) 系統(tǒng)DSN添加Microsoft Access Driver(*.mdb) 完成輸入數(shù)據(jù)源名字選擇
8、在對(duì)話框中找到所需要的數(shù)據(jù)庫(kù) ( 高級(jí) 輸入用戶名) 確定 淮海工學(xué)院 計(jì)算機(jī)課程以SQL Server 2000為例先在數(shù)據(jù)庫(kù)里建立一個(gè)帳戶、,指定其可以訪問(wèn)的數(shù)據(jù)庫(kù),再點(diǎn)任務(wù)欄“開(kāi)始”按鈕設(shè)置控制面板管理工具數(shù)據(jù)源(ODBC) SQL Server 完成系統(tǒng)DSN添加輸入數(shù)據(jù)源的名稱選擇下拉列表中的服務(wù)器下提示失?。?完成 淮海工學(xué)院 計(jì)算機(jī)課程O(píng)DBC 數(shù)據(jù)源管理中的用戶DSN和系統(tǒng)DSN有什么區(qū)別?用戶DSN是與用戶相關(guān)的,不同用戶建立的DSN相互不可見(jiàn); 而系統(tǒng)DSN與用戶無(wú)關(guān),所有用戶都可見(jiàn) ;用戶DSN保存在注冊(cè)表中的HKEY_CURRENT_USERSoftwareODBC項(xiàng)下
9、(不包括ODBC驅(qū)動(dòng))系統(tǒng)DSN保存在注冊(cè)表中的HKEY_LOCAL_MACHINESoftwareODBC項(xiàng)下 淮海工學(xué)院 計(jì)算機(jī)課程(4)常用的數(shù)據(jù)庫(kù)操作SQL語(yǔ)句SELECT語(yǔ)句查詢記錄INSERT語(yǔ)句插入記錄UPDATE語(yǔ)句更新記錄DELETE語(yǔ)句刪除記錄CREATE語(yǔ)句創(chuàng)建表 淮海工學(xué)院 計(jì)算機(jī)課程 淮海工學(xué)院 計(jì)算機(jī)課程語(yǔ)句功能語(yǔ)法格式建立數(shù)據(jù)表CREATETABLE數(shù)據(jù)表名 (字段名1數(shù)據(jù)類(lèi)型(長(zhǎng)度),字段名2數(shù)據(jù)類(lèi)型(長(zhǎng)度),)舉例:createtablestudent( xhtext(9),xmtext(8) ,cjsingle(4), nl integer(2)建立含有xh
10、、xm、cj、nl4個(gè)字段的student表添加字段ALTERTABLE數(shù)據(jù)表名ADDCOLUMN字段名 數(shù)據(jù)類(lèi)型(長(zhǎng)度)舉例:altertablestudentadd columnxbtext(2)在學(xué)生表中添加性別字段刪除字段ALTERTABLE數(shù)據(jù)表名 DROPCOLUMN字段名舉例: altertablestudentdropcolumnnl將學(xué)生表中的年齡字段刪除SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY子句HAVING子句 ORDER BY 子句 INTO 子句舉例:selectxh, xm from student wherexb=男order b
11、y xh數(shù)據(jù)查詢從學(xué)生表中查詢性別為男的學(xué)生,顯示其學(xué)號(hào)和姓名并使結(jié)果按學(xué)號(hào)升序排列。INSERT INTO 數(shù)據(jù)表名(字段名1,字段名2)VALUES(數(shù)據(jù)1,數(shù)據(jù)2)添加記錄舉例:insertintostudent (xh, xm,xb)values(015200101, 王小二, 男)DELETEFROM數(shù)據(jù)表名WHERE 條件表達(dá)式刪除記錄舉例:deletefromstudentwherexb=男UPDATE式數(shù)據(jù)表名 SET新數(shù)據(jù)值 WHERE條件表達(dá)更新記錄舉例:updatestudentsetcj=cj+5wherexb=女淮海工學(xué)院 計(jì)算機(jī)課程課堂練習(xí)設(shè)計(jì)數(shù)據(jù)庫(kù):所選課題數(shù)據(jù)表
12、建立數(shù)據(jù)源:ODBC在查詢分析器中練習(xí)SQL命令:插入、更新、查詢編寫(xiě)java程序,通過(guò)圖形用戶界面讀取數(shù)據(jù)表中信息 淮海工學(xué)院 計(jì)算機(jī)課程7.1 Java的數(shù)據(jù)庫(kù)編程Java中專(zhuān)門(mén)設(shè)置了一個(gè)java.sql包,定義了很多用來(lái)實(shí)現(xiàn)SQL功能的類(lèi),使用這些類(lèi),編程人員就可 以很方便地開(kāi)發(fā)數(shù)據(jù)庫(kù)前端的應(yīng)用。因?yàn)镾QL是一種直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的非過(guò)程掃描語(yǔ)言,不適合整個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序的前端編程, 所以需要其他語(yǔ)言來(lái)實(shí)現(xiàn)SQL語(yǔ)言的功能以完成對(duì) 數(shù)據(jù)庫(kù)的操作。 淮海工學(xué)院 計(jì)算機(jī)課程7.1.1 JDBC的概念JDBC(Java DataBase Connectivity)是一種用于執(zhí)行SQL語(yǔ)句的J
13、ava API,由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),即用Java實(shí)現(xiàn)的數(shù)據(jù)庫(kù)接術(shù)。輔助Java程序?qū)崿F(xiàn)數(shù)據(jù)庫(kù)功能的配套支持技術(shù)通稱為JDBC。JDBC的用途:(1)與數(shù)據(jù)庫(kù)建立連接(2) 發(fā)送SQL語(yǔ)句(3) 處理結(jié)果淮海工學(xué)院 計(jì)算機(jī)課程示例:/與數(shù)據(jù)庫(kù)建立連接Connectioncon=DriverManager.getConnection(“jdbc:odbc:student”,”user”,”pwd”);/發(fā)送SQL語(yǔ)句,從數(shù)據(jù)庫(kù)中提取記錄Statement stmt=con.createStatement();ResultSet rs=stmt.
14、excuteQuery(“select id,name,score from table_student ”);/對(duì)讀出的記錄結(jié)果進(jìn)行處理賦給變量While (rs.next()int sid=rs.getInt(“id”);String sname=rs.getString(“name”); Float scj=rs.getFloat(“score”); 淮海工學(xué)院 計(jì)算機(jī)課程負(fù)責(zé)與java應(yīng)用程序通信,向java應(yīng)用程序提供數(shù)據(jù)JDBC APIJDBC Driver API負(fù)責(zé)與具體數(shù)據(jù)環(huán)境的連接數(shù)據(jù)庫(kù)JDBC 和數(shù)據(jù)庫(kù)的通信路徑數(shù)據(jù)庫(kù)淮海工學(xué)院 計(jì)算機(jī)課程Java 應(yīng)用程序JDBC 驅(qū)動(dòng)
15、程序管理器JDBC/ODBC橋供應(yīng)商提供的JDBC驅(qū)動(dòng)程序ODBC驅(qū)動(dòng)程序四類(lèi)JDBC驅(qū)動(dòng)程序第一類(lèi)把JDBC轉(zhuǎn)換成ODBC,靠ODBC驅(qū)動(dòng)程序與數(shù) 據(jù)庫(kù)通信第二類(lèi)其源代碼由兩部分組成,一部分是java語(yǔ)言代碼, 另一部分是本地代碼,這類(lèi)驅(qū)動(dòng)程序和一個(gè)數(shù)據(jù)庫(kù)客戶的API通信;第三類(lèi)是一個(gè)純Java客戶庫(kù),它使用一個(gè)獨(dú)立于數(shù)據(jù)庫(kù) 的協(xié)議,把數(shù)據(jù)庫(kù)請(qǐng)求傳送給一個(gè)服務(wù)器組件,這個(gè)組 件把數(shù)據(jù)庫(kù)請(qǐng)求轉(zhuǎn)換成指定數(shù)據(jù)庫(kù)協(xié)議接受的請(qǐng)求;第四類(lèi)是一個(gè)純Java庫(kù),直接把JDBC請(qǐng)求轉(zhuǎn)換成指定 數(shù)據(jù)庫(kù)協(xié)議接受的請(qǐng)求。數(shù)據(jù)庫(kù)廠商一般都為其數(shù)據(jù)庫(kù)提供第三或第四類(lèi)驅(qū)動(dòng)程 序。 淮海工學(xué)院 計(jì)算機(jī)課程JDBC-ODBC
16、橋的概念ODBC(Open Database Connectivity,開(kāi)放數(shù)據(jù)庫(kù)互連)是微軟公司開(kāi)放服務(wù)結(jié)構(gòu)(WOSA, Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的標(biāo)準(zhǔn)API。這些API利用SQL來(lái)完成其大部分任務(wù)。ODBC本身也提供了對(duì)SQL語(yǔ)言的支持,用戶可以直接將SQL語(yǔ)句送給ODBC。 ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫(kù)。 淮海工學(xué)院 計(jì)算機(jī)課程JDBC-ODBC橋是一個(gè)JDBC驅(qū)動(dòng)程序,它通過(guò)將JDBC操作轉(zhuǎn)換為ODBC操作來(lái)實(shí)現(xiàn)JDBC操作。 通過(guò)odbc子協(xié)議,使
17、用URL打開(kāi)JDBC連接即可使用橋,建立連接前必須將橋驅(qū)動(dòng)程序類(lèi)sun.jdbc.odbc.JdbcOdbcDriver添加到名為jdbc.drivers的java,lang.System屬性中,或者用代碼顯示加載:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 淮海工學(xué)院 計(jì)算機(jī)課程7.1.2 用JDBC連接數(shù)據(jù)庫(kù)1. 建立數(shù)據(jù)源加載Java應(yīng)用程序所用的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序。以JDBC-ODBC橋?yàn)槔嚎刂泼姘骞芾砉ぞ邤?shù)據(jù)源(ODBC)系統(tǒng)DSN添加選擇數(shù)據(jù)庫(kù): SQL server(或MS Access Driver) 給出數(shù)據(jù)源名和服務(wù)器名選擇
18、SQL驗(yàn)證方式、輸入用戶名選擇需要連接的數(shù)據(jù)庫(kù)確定。和例: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);String url=”jdbc:odbc:student”; 淮海工學(xué)院 計(jì)算機(jī)課程2.建立連接DriverManager類(lèi)用來(lái)處理驅(qū)動(dòng)程序的調(diào)入,并且對(duì)新的數(shù)據(jù)庫(kù)連接提供支持.與數(shù)據(jù)庫(kù)建立連接的標(biāo)準(zhǔn)方法是調(diào)用方法創(chuàng)建對(duì)象:Connection con= DriverManager.getConnection ( Stringurl, String user, String password);訪問(wèn)數(shù)據(jù)源的用戶名訪問(wèn)數(shù)據(jù)源的數(shù)據(jù)源的位置淮海工
19、學(xué)院 計(jì)算機(jī)課程3.執(zhí)行SQL語(yǔ)句JDBC提供了Statement接口來(lái)發(fā)送SQL語(yǔ)句,Statement接口的對(duì)象由createStatement方法創(chuàng)建;SQL語(yǔ)句發(fā)送后返回的結(jié)果通常存放在一個(gè)ResultSet接口的對(duì)象中;ResultSet可以看作一個(gè)表,這個(gè)表包含由SQL返回的列名和相應(yīng)的值, ResultSet對(duì)象中維持了一個(gè)指向當(dāng)前行的指針,通過(guò)一系列g(shù)etxxx方法檢索當(dāng)前行的各個(gè)列,從而顯示出來(lái)。 淮海工學(xué)院 計(jì)算機(jī)課程4.關(guān)閉連接statement.close();connection.close(); 淮海工學(xué)院 計(jì)算機(jī)課程7.1.3 JDBC編程在Java中用JDBC編
20、程主要是對(duì)JDBC API的應(yīng)用, 在JDBC API中對(duì)數(shù)據(jù)庫(kù)的應(yīng)用主要是對(duì)DriverManager類(lèi)、 Connection、 Statement 、PreparedStatement和 ResultSet這幾個(gè)接口的應(yīng)用。 DriverManager類(lèi)是JDBC的管理層,跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù) 庫(kù)和應(yīng)用程序之間建立連接。通過(guò)調(diào)用Class.forName()方法可顯示地加載驅(qū)動(dòng)程序,然后自動(dòng)在DriverManager類(lèi)中注冊(cè)。 淮海工學(xué)院 計(jì)算機(jī)課程例:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);String url=jdbc:odb
21、c:CardAccess;Connectionconn =DriverManager.getConnection(url,”uid”,”pwd”); 淮海工學(xué)院 計(jì)算機(jī)課程 Statement接口Statement對(duì)象用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。Statement接口提供了三種執(zhí)行SQL語(yǔ)句的方法: executeQuery(String )用于執(zhí)行select語(yǔ)句executeUpdate(String)用于執(zhí)行insert 、update、 delete語(yǔ)句及數(shù)據(jù)定義語(yǔ)句(如create table)execute()用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新等復(fù)雜功能。例: Statement
22、stm= conn. createStatement() ;ResultSetrs=stm.executeQuery(“select * from xs”); 淮海工學(xué)院 計(jì)算機(jī)課程PreparedStatement接口PreparedStatement 代表一個(gè)預(yù)編譯的SQL語(yǔ)句,是從Statement接口繼承而來(lái)的,與Statement不同之處: (1) PreparedStatement實(shí)例包含已編譯好的SQL語(yǔ)句, 執(zhí)行速度比Statement快,需要多次執(zhí)行的SQL語(yǔ)句經(jīng)常創(chuàng)建為PreparedStatement對(duì)象;(2) 包含在PreparedStatement中的SQL語(yǔ)句中可
23、以具有一個(gè)或者多個(gè)IN參數(shù),SQL語(yǔ)句中的參數(shù)先用作占位符.?號(hào)一般Statement用于SELECT語(yǔ)句,PreparedStatement用于UPDATE語(yǔ)句,ResultSet用于SELECT的結(jié)果集。 淮海工學(xué)院 計(jì)算機(jī)課程 ResultSet接口ResultSet包含符合SQL語(yǔ)句中條件的所有行,并通過(guò)一套get方法訪問(wèn)當(dāng)前行中的不同列。ResultSet.next()方法用于移動(dòng)到記錄集中的下一行,并使下一行成為當(dāng)前行。列是從左到右編號(hào)的,從列1開(kāi)始。用getXXX方法輸入列名時(shí)不區(qū)分大小寫(xiě)。例:ResultSetrs=stm.executeQuery(“selectxh,xm,n
24、l from tb”);String no= rs.getString(“xh”); String name= rs.getString(“xm”); int age= rs.getInt(3); 淮海工學(xué)院 計(jì)算機(jī)課程淮海工學(xué)院 計(jì)算機(jī)課程用JDBC-ODBCimport java.sql.*; public class TestJDBCpublic static void main(String args)Statement stm; ResultSet rs; Connection conn;PreparedStatement sql2,sql3;String url = jdbc:od
25、bc:CardAccess; String user= ;String password= ;try/ 使用jdbc與odbc橋創(chuàng)建數(shù)據(jù)庫(kù)連接Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/ 使用getConnection()方法建立連接,第2個(gè)參數(shù)定義用戶名, 第3個(gè)參數(shù)定義conn = DriverManager.getConnection(url,user,password); stm=conn.createStatement();連接數(shù)據(jù)庫(kù)示例淮海工學(xué)院 計(jì)算機(jī)課程sql2= conn.prepareStatement(“update STUD
26、ENT setwhere 姓名=Jane);性別=男sql3= conn.prepareStatement(“insert into STUDENT(學(xué)號(hào),姓名,性別) values(1006,Alice,男);sql2.executeUpdate();/sql3.executeUpdate();/執(zhí)行更新/執(zhí)行插入String sql1=select * from STUDENT;rs=stm.executeQuery(sql1);庫(kù)原始記錄System.out.print(學(xué)號(hào)/得到查詢結(jié)果并打印數(shù)據(jù));System.out.print(姓名);System.out.println(性別)
27、;while(rs.next() System.out.print(rs.getLong(1)+ |); System.out.print(rs.getString(2)+ |);System.out.println(rs.getString(3); 淮海工學(xué)院 計(jì)算機(jī)課程rs.close();stm.close();conn.close();catch(SQLException sqle)System.out.println(1+sqle.toString();catch(Exception e)System.out.println(2+e.toString();7.2 輸入輸出流和文件處理
28、流的概念7.2. 1 流是指在計(jì)算機(jī)的輸入與輸出之間運(yùn)動(dòng)的數(shù)據(jù)的 序列。輸入流代表從外設(shè)流入計(jì)算機(jī)的數(shù)據(jù)序列, 輸出流代表從計(jì)算機(jī)流向外設(shè)的數(shù)據(jù)序列。 流的最大特點(diǎn)是:數(shù)據(jù)的獲取和發(fā)送均按數(shù)據(jù)序 列順序進(jìn)行。 Java中的流分為兩種(被抽象為四個(gè)類(lèi)): 字節(jié)流: InputStream類(lèi)和OutputStream類(lèi)字符流: Reader類(lèi)和Writer類(lèi)字符流比字節(jié)流更有效。 淮海工學(xué)院 計(jì)算機(jī)課程1. 字節(jié)流從抽象類(lèi)InputStream和OutputStream派生出來(lái)的一系列類(lèi),這類(lèi)流以字節(jié)(byte)為基本處理單位。字節(jié)流類(lèi)功能FileOutputStream寫(xiě)入文件的輸出流FileI
29、nputStream從文件讀入的輸入流DataOutputStream包含了寫(xiě)Java標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型的輸出流DataInputStream包含了讀取Java標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型的輸入流BufferOutputStream緩沖輸出流ByteArrayInputStream從字節(jié)數(shù)組讀取的輸入流ByteArrayOutputStream寫(xiě)入字節(jié)數(shù)組的輸出流PrintStream包含最常見(jiàn)的Print()和Println()的輸出流淮海工學(xué)院 計(jì)算機(jī)課程基本輸入流類(lèi)InputStream的常用方法 從流中讀取數(shù)據(jù):int read( );/讀取一個(gè)字節(jié),返回值為所讀的字節(jié)int read( byte b );
30、讀取多個(gè)字節(jié),放置到字節(jié)數(shù)組b中,通常讀取的字節(jié) 數(shù)量為b的長(zhǎng)度,返回值為實(shí)際讀取的字節(jié)的數(shù)量int read( byte b , int off, int len );讀取len個(gè)字節(jié),放置到以下標(biāo)off開(kāi)始字節(jié)數(shù)組b中, 返回值為實(shí)際讀取的字節(jié)的數(shù)量int available( );/返回值為流中尚未讀取的字節(jié)的數(shù)量long skip( long n ); /讀指針跳過(guò)n個(gè)字節(jié)不讀,返回值為實(shí)際跳過(guò)的字節(jié)數(shù)量 關(guān)閉流: close( );/流操作完畢后必須關(guān)閉 淮海工學(xué)院 計(jì)算機(jī)課程基本輸出流類(lèi)OutputStream 的常用方法 輸出數(shù)據(jù):void write( int b );/往流中
31、寫(xiě)一個(gè)字節(jié)bvoid write( byte b ); /往流中寫(xiě)一個(gè)字節(jié)數(shù)組bvoid write( byte b , int off, int len );把字節(jié)數(shù)組b中從下標(biāo)off開(kāi)始、長(zhǎng)度為len的字節(jié)寫(xiě)入流中 flush( )/刷空輸出流,并輸出所有被緩存的字節(jié)由于某些流支持緩存功能,該方法將把緩存中所有內(nèi)容強(qiáng)制輸出到流中。 關(guān)閉流:close( );/流操作完畢后必須關(guān)閉 淮海工學(xué)院 計(jì)算機(jī)課程淮工學(xué)院 計(jì)算機(jī)課程常用字符流子類(lèi)和功能InputStreamReader將字節(jié)轉(zhuǎn)換為字符的輸入流OutputStreamWriter將字節(jié)轉(zhuǎn)換為字符的輸出流FileReader從文件讀入的
32、輸入流FileWriter寫(xiě)入文件的輸出流CharArrayReader從字符數(shù)組讀取的輸入流CharArrayWriter寫(xiě)入字符數(shù)組的輸出流StringReader從字符數(shù)串讀取的輸入流StringWriter海寫(xiě)入字符串的輸出流從抽象類(lèi)Reader和Writer派生出的一系列子類(lèi),這類(lèi)流以16位的Unicode碼表示的字符(一個(gè)字符由兩個(gè)字節(jié)組成)為基本處理單位。 2字符流7.2.2基本流1.鍵盤(pán)輸入和格式化輸出Java有3個(gè)內(nèi)置的標(biāo)準(zhǔn)流對(duì)象:1) 標(biāo)準(zhǔn)輸入流System.in:2) 標(biāo)準(zhǔn)輸出流System.out: 3)標(biāo)準(zhǔn)輸出流System.err:(1)鍵盤(pán)輸入:用來(lái)讀取用戶從鍵盤(pán)
33、的輸入用來(lái)在屏幕上顯示信息用來(lái)顯示出錯(cuò)信息使用System.in對(duì)象的read()方法例: char c=(char)System.in.read( );使用InputStreamReader 、BufferReader流類(lèi)例: InputStreamReader isr=new InputStreamReader(System.in);BufferReader br=new BufferReader(isr); 淮海工學(xué)院 計(jì)算機(jī)課程 通過(guò)Java的控制臺(tái)類(lèi)Console類(lèi)Console類(lèi)不是Java的標(biāo)準(zhǔn)類(lèi)庫(kù),它屬于corejava包。 使用Console類(lèi)時(shí)需要加:Import core
34、java.ConsoleConsole類(lèi)主要方法:1)readInt(Stringprompt) 提示輸入一個(gè)整數(shù)2)readDouble(String點(diǎn)數(shù)prompt) 提示輸入一個(gè)浮3)readLine(Stringprompt) 提示輸入一個(gè)字符串,直到行結(jié)束。例:String s=Console.readLine(“請(qǐng)輸入你的名字”);System.out.println(“你好,”+s); 淮海工學(xué)院 計(jì)算機(jī)課程(2)格式化輸出 用Java的標(biāo)準(zhǔn)輸出System.out,可以輸出不同類(lèi)型的對(duì)象:例 :Int a=20; System.out .print(a)System.out .
35、println(“大家好”)/加換行用java.text包中的NumberFormat類(lèi)可以控制顯示格式,有三種方法:NumberFormat.getNumberInstance( ) /附加逗號(hào)NumberFormat.getCurrencyInstance( ) /貨幣符號(hào)NumberFormat.getPercentInstance( ) /百分號(hào) 淮海工學(xué)院 計(jì)算機(jī)課程例:import java.io.*;import java.text.*; Public class TestOutputPublic static void main(String args ) double x=2
36、345.123;String s1,s2,s3;NumberFormat n1=NumberFormat.getNumberInstance( ); NumberFormat c1=NumberFormat. getCurrencyInstance( ); NumberFormat p1=NumberFormat. getPercentInstance( ) ;s1=n1.format(x); s2=c1.format(x); s3=p1.format(x);System.out.println(s1+”+ s2+”+ s3); 結(jié)果: 2,345.123¥ 2,345.12234,512%
37、淮海工學(xué)院 計(jì)算機(jī)課程格式串范例值說(shuō)明1,234.50,#0.00小數(shù)點(diǎn)后兩位,顯示尾數(shù)零$,#0.00($,#0.00)($1,234.50)用園括號(hào)包圍負(fù)數(shù)代替使用一個(gè)負(fù)號(hào),要先加$符號(hào)0.#1234.5如果數(shù)在-1 和1之間,打印前導(dǎo)0,不顯示尾數(shù)0淮海工學(xué)院 計(jì)算機(jī)課程 用戶自定義輸出格式 用DecimalFormat類(lèi)和Format類(lèi)DecimalFormat類(lèi)適合貨幣之類(lèi)的格式化Format類(lèi)(在附帶的corejava包中,要把它加到classpath中)適合科技方面格式化,和C語(yǔ)言的printf函數(shù)功能類(lèi)似。DecimalFormat類(lèi)的范例格式串Format的范例格式首先加:
38、import corejava.Format; f固定格式的浮點(diǎn)數(shù)Format.printf(“x的值是%10.2fn”, x); d,i 以十進(jìn)制表示的整數(shù)s字符串c字符g,G以一般格式表示浮點(diǎn)數(shù),對(duì)小數(shù)用定點(diǎn)格式, 對(duì)大數(shù)用指數(shù)格式x,X以十六進(jìn)制表示的整數(shù)o以八進(jìn)制表示例:Format.printf(“你的工資是%10.2fn”, pay); 淮海工學(xué)院 計(jì)算機(jī)課程7.2.3 文件類(lèi)1. Java程序的文件與目錄管理Java.io包中的File類(lèi)專(zhuān)門(mén)用來(lái)管理磁盤(pán)文件和目 錄。每個(gè)File類(lèi)的對(duì)象表示一個(gè)磁盤(pán)文件或目錄, 對(duì)象屬性中包含名稱、長(zhǎng)度、所含文件個(gè)數(shù)等信息。(1)創(chuàng)建File類(lèi)對(duì)
39、象的三種方法:File(Stringpath); 指明磁盤(pán)文件或目錄名及其路徑注意:目錄分隔符用System.dirSep表示如:File f1=new File(“c:”+ System.dirSep+”sj”)File(Stringpath, Stringname);淮海工學(xué)院 計(jì)算機(jī)課程文件或目錄名文件或目錄的路徑已經(jīng)存在的磁盤(pán)目 File(Filedir, String錄name);(2)獲取文件或目錄屬性淮海工學(xué)院 計(jì)算機(jī)課程boolean exists( )若文件或目錄存在則返回trueboolean isFile( )若對(duì)象代表有效文件則返回trueboolean isDirec
40、tory( )若對(duì)象代表有效目錄則返回trueStringgetName( )返回文件名或目錄名StringgetPath( )返回文件或目錄的路徑longlength( )返回文件的字節(jié)數(shù)boolean canRead( )若文件為可讀文件則返回trueboolean canWrite( )若文件為可寫(xiě)文件則返回trueboolean equals(File f )若兩個(gè)文件對(duì)象相同則返回trueString list( )將目錄中所有文件名存在數(shù)組中返回(3)文件或目錄的操作注意:由于Java Applet程序是從網(wǎng)絡(luò)上下載到本地機(jī)器運(yùn)行的,不可知也不可控,所以Java的安全機(jī)制禁止Jav
41、a Applet程序訪問(wèn)和存取本地文件,如果試圖在Java Applet程序中使用文件操作,則將引發(fā)Java的安全性異常。文件操作例子 淮海工學(xué)院 計(jì)算機(jī)課程Boolean renameTo(File newFile)將文件重命名Void delete( )將當(dāng)前文件刪除Boolean mkdir( )創(chuàng)建當(dāng)前目錄的子目錄2. 寫(xiě)文本文件方法一:用FileOutputStream打開(kāi)文件my.txt,然后 用PrintStream 對(duì)象p的println方法把字符串寫(xiě)入文件中。例:FileOutputStreamfout=new FileOutputStream(“my.txt”)PrintS
42、tream p=new PrintStream(fout); p.println(“要寫(xiě)入文本文件中的內(nèi)容”); p.close();寫(xiě)文本例子1 淮海工學(xué)院 計(jì)算機(jī)課程方法二:用FileWriter打開(kāi)文件myf.txt,又創(chuàng)建了文本輸出流out,然后用out 的print(或者println)方法把字符串寫(xiě)入文件中。例:FileWriterfw= new FileWriter(“myf.txt”);PrintWriter out=newPrintWriter(fw);out.print(“要寫(xiě)入文本文件中的內(nèi)容”);out.close();fw.close();/關(guān)于輸出/關(guān)閉文件寫(xiě)文本例
43、子2 淮海工學(xué)院 計(jì)算機(jī)課程3. 讀文本文件方法一:用FileInputStream打開(kāi)文件my.txt,然后建立DataInputStream的 對(duì)象in(文件流),使用in的readLine()方法以一行為單位讀出my.txt文件中的所有字符串。例:FileInputStreamfs=new FileInputStream(“my.txt”)DataInputStream in=newwhile(in.available( )!=0)DataInputStream(fs);System.out.println( in.readLine() );in.close(); /關(guān)閉輸入流讀文本例子
44、1 淮海工學(xué)院 計(jì)算機(jī)課程方法二:用FileReader打開(kāi)文件myf.txt,然后用BufferedReader類(lèi)的對(duì)象br作為文件流,用br 的readline()讀取文件中的字符串。例:FileReader fr= new FileReader (“myf.txt”); BufferedReader br=new BufferedReader(fr); String record=new String( );Int recCount=0;While (record=br.readLine()!=null) recCount+; System.out.println(recCount+”:
45、”+ record);br.close();/關(guān)于緩存fr.close();/關(guān)閉文件讀文本例子2 淮海工學(xué)院 計(jì)算機(jī)課程4. 程序?qū)ξ募碾S機(jī)訪問(wèn)用RandomAccessFile類(lèi)可以實(shí)現(xiàn)對(duì)文件的隨機(jī)讀寫(xiě)操作,即可以在文件的任意位置執(zhí)行數(shù)據(jù)讀寫(xiě); 創(chuàng)建RandomAccessFile的對(duì)象例:File mf= new File (“myf.txt”);RandomAccessFile myRAF=new RandomAccessFile (mf,”rw”);訪問(wèn)模式:rw: 可讀、可寫(xiě)r: 只讀作為數(shù)據(jù)源的文件淮海工學(xué)院 計(jì)算機(jī)課程 對(duì)文件位置指針的操作利用getPointer( )方法可
46、以獲得當(dāng)前文件位置指針從文件頭算起的絕對(duì)位置:public long getPointer( );利用seek( )方法可以將指針移動(dòng)到pos指定的文件位置:public void seek( long pos );從文件頭算起的絕對(duì)位置利用length( )方法可以返回文件的字節(jié)長(zhǎng)度:public long length( ); 淮海工學(xué)院 計(jì)算機(jī)課程 對(duì)文件進(jìn)行讀寫(xiě)操作文件訪問(wèn)例子RandomAccessFile類(lèi)實(shí)現(xiàn)了DataInput和DataOutput接口,在讀/寫(xiě)時(shí)具備強(qiáng)大的含類(lèi)型轉(zhuǎn)換的輸入/輸出功能;RandomAccessFile類(lèi)的所有方法都有可能拋出IOException
47、異常,在利用它實(shí)現(xiàn)文件操作時(shí)需要將相關(guān)語(yǔ)句放在try塊中,并配上catch塊來(lái)處 理異常。 淮海工學(xué)院 計(jì)算機(jī)課程7.3 Java的多線程機(jī)制Java中的線程7.3.11.程序、進(jìn)程與線程的區(qū)別?;春9W(xué)院 計(jì)算機(jī)課程線程是比進(jìn)程更小的執(zhí)行單位,一個(gè)進(jìn)程在執(zhí)行過(guò)程中可以 產(chǎn)生多個(gè)線程,每個(gè)線程有自己的產(chǎn)生、存在、消亡的過(guò)程。 線程間可以共享相同的內(nèi)存單元,實(shí)現(xiàn)數(shù)據(jù)交換、實(shí)時(shí)通信和同步操作。進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過(guò)程(放電影),對(duì)應(yīng)著代碼加載、 執(zhí)行到執(zhí)行完畢的全過(guò)程。每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi) 存空間、一組系統(tǒng)資源。在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù) 據(jù)和狀態(tài)都是完全獨(dú)立的。程序是一段靜態(tài)
48、的代碼,是應(yīng)用軟件執(zhí)行的藍(lán)本(電影膠片) Java的多線程Java內(nèi)在支持多線程,它的所有類(lèi)都是在多線程下 定義的,Java利用多線程可以開(kāi)發(fā)能同時(shí)處理多個(gè) 任務(wù)的功能強(qiáng)大的應(yīng)用程序。Java程序通過(guò)流控制來(lái)執(zhí)行程序流,程序中單個(gè)順 序的流控制稱為線程,多線程則指的是在單個(gè)程序 中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。多線程意味著一個(gè)程序的多行語(yǔ)句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行。 淮海工學(xué)院 計(jì)算機(jī)課程使用多線程的好處:使UI交互的響應(yīng)更塊充分利用多處理器系統(tǒng)簡(jiǎn)化建模執(zhí)行異步和處理 淮海工學(xué)院 計(jì)算機(jī)課程Java中的線程由三部分組成:1. 虛擬的CPU,封裝在java.lang.Th
49、read類(lèi)中2. CPU所執(zhí)行的代碼,傳遞給Thread類(lèi)3. CPU所處理的數(shù)據(jù),傳遞給Thread類(lèi)應(yīng)用程序1操作系統(tǒng)線程1Java虛擬機(jī)線程3Java中的線程多任務(wù)示意圖 淮海工學(xué)院 計(jì)算機(jī)課程共享內(nèi)存局部變量局部變量局部變量線程2應(yīng)用程序22. 線程的狀態(tài)與生命周期新建其他阻塞sleep()時(shí)間到start()sleep()或join()run()方法結(jié)束運(yùn)行yield()可運(yùn)行終止scheduler()synchronizedwait()獲得鎖Interrupt()等待阻塞notify()notifyAll()對(duì)象鎖阻塞 淮海工學(xué)院 計(jì)算機(jī)課程(1)創(chuàng)建狀態(tài)(new Thread)執(zhí)行下列語(yǔ)句時(shí),線程就處于創(chuàng)建狀態(tài):Thread myThread = new MyThreadClass( ); 當(dāng)一個(gè)線程處于創(chuàng)建狀態(tài)時(shí),它僅僅是一個(gè)空的 線程對(duì)象,系統(tǒng)不為它分配資源。 淮海工學(xué)院 計(jì)算機(jī)課程(2) 可運(yùn)行狀態(tài)( Runnable )Thread myThread = new MyThreadClass( ); myThread.start( );當(dāng)一個(gè)線程處于可運(yùn)行狀態(tài)時(shí),系統(tǒng)為這個(gè)線程分配了它需的系統(tǒng)資源,這樣該線程處于運(yùn)行就緒狀 態(tài),系統(tǒng)中可以同時(shí)有多個(gè)線程處于Runnable 狀態(tài)。(3) 運(yùn)行狀態(tài)(Running)是線程占有CPU并實(shí)際運(yùn)行
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 永輝消防課件
- 部門(mén)培訓(xùn)規(guī)劃安排
- 語(yǔ)言模型面試題及答案
- 保山中醫(yī)藥高等專(zhuān)科學(xué)?!吨腥A文化》2023-2024學(xué)年第一學(xué)期期末試卷
- 電工安全培訓(xùn)教程
- 設(shè)計(jì)師評(píng)級(jí)考試題及答案
- 鄭州衛(wèi)生健康職業(yè)學(xué)院《有機(jī)農(nóng)業(yè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 美術(shù)策劃面試題及答案
- 模型算法面試題及答案
- 晨間活動(dòng)器械活動(dòng)方案
- 林權(quán)林地轉(zhuǎn)租協(xié)議書(shū)
- 2025年自來(lái)水筆試題及答案
- 廣東省深圳市福田區(qū)耀華實(shí)驗(yàn)學(xué)校2025年六年級(jí)下學(xué)期5月模擬預(yù)測(cè)數(shù)學(xué)試題含解析
- 2025年安徽中醫(yī)藥高等專(zhuān)科學(xué)校單招職業(yè)適應(yīng)性測(cè)試題庫(kù)有答案
- 2025年山東省威海市市屬事業(yè)單位招聘(綜合類(lèi))考試筆試高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 成績(jī)單申請(qǐng)書(shū)
- 高校人事檔案數(shù)字化建設(shè)實(shí)踐調(diào)研
- 2025年高中歷史會(huì)考會(huì)考全套知識(shí)復(fù)習(xí)
- 特殊作業(yè)安全管理監(jiān)護(hù)人專(zhuān)項(xiàng)培訓(xùn)課件
- 科幻中的物理學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 全過(guò)程造價(jià)咨詢項(xiàng)目保密及廉政執(zhí)業(yè)措施
評(píng)論
0/150
提交評(píng)論