国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JDBC基礎(chǔ)-從應(yīng)用程序創(chuàng)建applet

2019-11-18 11:57:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  假設(shè)Coffee Break的老板想在Web頁(yè)上的applet中顯示當(dāng)前的咖啡價(jià)格。讓applet直接從數(shù)據(jù)庫(kù)提取價(jià)格,他就可以確信顯示的是最新價(jià)格。
  
  為此需要?jiǎng)?chuàng)建兩個(gè)代碼文件,一個(gè)保存applet代碼,一個(gè)保存Html代碼。applet代碼包含一般程序都有的JDBC代碼以及運(yùn)行applet和顯示數(shù)據(jù)庫(kù)查詢(xún)結(jié)果的附加代碼。本例中applet代碼保存在OutputApplet.java文件中。為在HTML頁(yè)中顯示applet,文件OutputApplet.html會(huì)告訴瀏覽器要顯示的內(nèi)容及顯示的位置。
  
  本節(jié)其余部分講述applet代碼中的各種元素,它們?cè)讵?dú)立應(yīng)用程序中是不會(huì)出現(xiàn)的。其中某些元素包括了Java程序設(shè)計(jì)語(yǔ)言的一些高級(jí)特性。這里給出了一些基本原理和基本解釋?zhuān)珜?duì)它們的完全解釋超出了本教程范圍。為完成該示例applet,只需把握一般的思想,因此不用擔(dān)心沒(méi)有完全了解。您可用該applet代碼作模板,將查詢(xún)替代為自己的即可。
  
  編寫(xiě)applet代碼
  
  編寫(xiě)代碼前,applet導(dǎo)入獨(dú)立應(yīng)用程序沒(méi)有用到的一些類(lèi)。applet導(dǎo)入了applet特有的兩個(gè)類(lèi):Applet類(lèi)(java.applet包的一部分)和Graphics類(lèi)(java.awt包的一部分)。applet還導(dǎo)入了通用的java.util.Vector類(lèi)以便訪問(wèn)類(lèi)似于數(shù)組、大小可修改的容器。這些代碼使用Vector對(duì)象保存查詢(xún)結(jié)果以在后面顯示。
  
  所有的applet擴(kuò)展了Applet類(lèi);換言之,它們是Applet的子類(lèi)。因此每個(gè)appplet定義必須包含extends Applet字樣,如下所示:
  
  public class MyAppletName extends Applet {
  . . .
  }
  
  在applet例子OutputApplet中,這行代碼也包括implements Runnable字樣,實(shí)際代碼如下:
  
  public class OutputApplet extends Applet implements Runnable {
  . . .
  }
  
  Runnable是一個(gè)接口,它答應(yīng)一次運(yùn)行多個(gè)線程。線程是連續(xù)的控制流,程序可以是多線程的,換言之,很多線程并發(fā)地處理不同事情。OutputApplet類(lèi)通過(guò)定義run方法——Runnable中的惟一方法來(lái)實(shí)現(xiàn)Runnable接口。本例中run方法包含有如下用途的JDBC代碼:打開(kāi)連接、執(zhí)行查詢(xún)及從結(jié)果集中檢索結(jié)果。由于數(shù)據(jù)庫(kù)連接可能較慢,有時(shí)需幾秒鐘,通常好的想法是構(gòu)建一個(gè)applet以使用不同線程處理數(shù)據(jù)庫(kù)工作。
  
  與獨(dú)立應(yīng)用程序(需要一個(gè)main方法)類(lèi)似,一個(gè)applet至少要實(shí)現(xiàn)一個(gè)init、start或paint方法。示例applet定義了一個(gè)start方法和一個(gè)paint方法。每次調(diào)用start時(shí)就會(huì)創(chuàng)建一個(gè)新線程(名為worker)以重估數(shù)據(jù)庫(kù)查詢(xún)。每次調(diào)用paint時(shí)要么顯示查詢(xún)結(jié)果,要么顯示描述當(dāng)前applet狀態(tài)的字符串。
  
  如前所述,OutputApplet中定義的run方法包含了JDBC代碼。當(dāng)線程worker調(diào)用start方法時(shí)就會(huì)自動(dòng)調(diào)用run方法執(zhí)行線程worker中的JDBC代碼。run方法中的代碼與其他示例代碼中看到的帶有3個(gè)異常的代碼非常相似。首先它使用Vector類(lèi)保存查詢(xún)結(jié)果。第二它沒(méi)有輸出結(jié)果,而是把結(jié)果添加到Vector results中以在后面顯示。第三它同樣沒(méi)有輸出異常,而是記錄錯(cuò)誤消息以在后面顯示。
  
  applet使用各種方式描繪/顯示內(nèi)容。該applet是一個(gè)僅有文本的簡(jiǎn)單applet,使用drawString方法(Graphics類(lèi)的一部分)顯示文本。drawString方法帶有3個(gè)參數(shù):(1) 要顯示的字符串;(2) x坐標(biāo)——指出顯示字符串的橫向起點(diǎn);(3) y坐標(biāo)——指出顯示字符串的縱向起點(diǎn)(這在文本下面)。
  
  OutputApplet.java中的paint方法調(diào)用drawString方法在屏幕上實(shí)際顯示內(nèi)容。drawString主要顯示Vector results中的數(shù)據(jù)(存儲(chǔ)的查詢(xún)結(jié)果)。當(dāng)沒(méi)有查詢(xún)結(jié)果時(shí),drawString將顯示String message的當(dāng)前內(nèi)容。這個(gè)字符串將以“Initializing”開(kāi)始。當(dāng)調(diào)用start方法時(shí),這個(gè)字符串設(shè)為“Connecting to database”;當(dāng)碰到一個(gè)異常時(shí),setError方法就將它設(shè)為錯(cuò)誤消息。因此,假如數(shù)據(jù)庫(kù)連接要開(kāi)銷(xiāo)一定時(shí)間,applet瀏覽者將會(huì)看到消息“Connecting to database”,這就是message那時(shí)的內(nèi)容(當(dāng)AWT要applet在屏幕上顯示它的當(dāng)前狀態(tài)時(shí),AWT就會(huì)調(diào)用paint方法)。
  
  OutputApplet類(lèi)中定義的最后兩個(gè)方法setError和setResults是專(zhuān)用的,這表明它們只可讓OutputApplet使用。這兩個(gè)方法都調(diào)用了repaint方法以清除屏幕和調(diào)用paint。因此假如setResults調(diào)用repaint,將顯示查詢(xún)結(jié)果;假如setError調(diào)用repaint,將顯示錯(cuò)誤消息。
  
  最后,OutputApplet中定義的所有方法(除run方法外)都是同步的(synchronized)。要害字synchronized表明當(dāng)一個(gè)方法訪問(wèn)一個(gè)對(duì)象時(shí),其他的同步方法將不可再訪問(wèn)那個(gè)對(duì)象。方法run沒(méi)有聲明為同步,因此applet仍可以在處理數(shù)據(jù)庫(kù)連接時(shí)在屏幕上描繪自己。假如數(shù)據(jù)庫(kù)訪問(wèn)方法是同步的,那么在執(zhí)行期間會(huì)阻止重畫(huà)applet,這就可能導(dǎo)致延遲,且不會(huì)顯示任何相關(guān)的狀態(tài)消息。
  
  總之,好的編程習(xí)慣是在applet中做一些獨(dú)立應(yīng)用程序不需做的事情:
  
  將JDBC代碼放入獨(dú)立的線程。
  
  延遲期間在屏幕上顯示狀態(tài)消息(如在連接數(shù)據(jù)庫(kù)時(shí)開(kāi)銷(xiāo)較長(zhǎng)時(shí)間)。
  
  在屏幕上顯示錯(cuò)誤消息,而不是將它們輸出到System.out或System.err。
  
  運(yùn)行Applet
  
  在運(yùn)行示例applet前需要編譯文件OutputApplet.java。編譯創(chuàng)建了可在OutputApplet.html文件中引用的OutputApplet.class文件。
  
  運(yùn)行applet最輕易的方式是使用applet查看器(JDK的一部分)。只要使用下面各種平臺(tái)下的指令就可以編譯和運(yùn)行OutputApplet.java:
  
  UNIX
  
  javac OutputApplet.java
  appletviewer OutputApplet.html
  
  Windows 95/NT
  
  javac OutputApplet.java
  appletviewer OutputApplet.html
  
  在網(wǎng)上加載applet有著安全方面的限制。盡管這會(huì)顯得麻煩,但對(duì)于網(wǎng)絡(luò)安全是絕對(duì)必要的,安全是Java程序設(shè)計(jì)語(yǔ)言的一個(gè)主要優(yōu)點(diǎn)。除非瀏覽器答應(yīng)網(wǎng)絡(luò)連接,否則applet只可對(duì)它的源主機(jī)進(jìn)行網(wǎng)絡(luò)連接。一臺(tái)主機(jī)是否認(rèn)為本地安裝的applet是“信任的”,這取決于瀏覽器上設(shè)置的安全限制。applet通常不能讀/寫(xiě)在執(zhí)行它的主機(jī)上存放的文件,也不可加載庫(kù)和定義本地方法。
  
  通常applet可對(duì)它們的源主機(jī)進(jìn)行網(wǎng)絡(luò)連接,因此它們可在Intranet上很好地運(yùn)行。
  
  JDBC-ODBC Bridge驅(qū)動(dòng)程序有點(diǎn)例外。它可以非常成功地用于Intranet訪問(wèn),但它要求在每個(gè)客戶(hù)端上安裝ODBC、橋、橋本地庫(kù)和JDBC。使用這種配置就可在Java程序和信任的applet中進(jìn)行Intranet訪問(wèn)。由于橋要求非凡的客戶(hù)端配置,所以在使用JDBC-ODBC Bridge驅(qū)動(dòng)器的Internet上運(yùn)行applet很不實(shí)際。這是JDBC-ODBC Bridge而不是JDBC的一個(gè)局限。假如使用純Java JDBC驅(qū)動(dòng)程序,不必做任何非凡配置就可在Internet上運(yùn)行applet。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安泽县| 静安区| 乾安县| 调兵山市| 澎湖县| 南涧| 商洛市| 鹿泉市| 会东县| 赣州市| 石嘴山市| 鄂托克旗| 璧山县| 甘南县| 兴和县| 徐水县| 洛浦县| 金阳县| 来凤县| 扎囊县| 南漳县| 辉县市| 马鞍山市| 宜兰县| 贵德县| 雅安市| 通河县| 镇安县| 江油市| 漳州市| 凤凰县| 乌海市| 龙井市| 都安| 迁西县| 江源县| 平利县| 时尚| 兰坪| 陆丰市| 西乌珠穆沁旗|