Professional Documents
Culture Documents
Giaotrinhjava1234 PDF
Giaotrinhjava1234 PDF
MN HC : LP TRNH JAVA
M U
Mc Tiu Bi Hc
Th no l lp trnh hng i tng Tm hiu v tru tng d liu nh ngha lp v i tng Constructor v Destructor Tm hiu v tnh lu tr, bao bc d liu, tnh k tha v a hnh Cc u im ca phng php lp trnh hng i tng
Tp trung vo vn Xc nh nhng tnh cht v hnh ng thit yu Loi tr nhng chi tit khng cn thit
Cc hnh ng
Nhp tn ca khch hng Nhp a ch ca khch hng Nhp i xe hi mua c Nhp tn ngi bn xe hi Lp ho n
Lp
Lp l mt nhm cc i tng c chung nhng tnh cht v hnh ng
Lp Khch hng
Tn khch hng a ch khch hng i xe hi mua Tn ngi bn xe hi Nhp tn Nhp a ch Nhp i ca xe hi mua c Nhp tn ca ngi bn xe hi Lp ha n
i Tng
i tng l mt th hin ca lp
Hnh ng
Dch v m i tng c th p ng
Phng thc
c t cch p ng bng hnh ng khi c yu cu
Thng ip
Yu cu mt hnh ng
Bin c
S kch thch t i tng ny gi sang i tng khc
Lp V i Tng
Lp l mt thc th, cn i tng l mt thc th thc t Lp l mt m hnh nim nh r cc tnh cht v cc hnh ng c quy nh bi mt i tng, cn i tng l mt m hnh thc s Lp l khun mu t i tng c to ra Tt c cc i tng trong cng mt lp c cc tnh cht v cc hnh ng nh nhau
Constructor
Tin trnh to ra mt i tng c gi l Constructor Mt Constructor:
Cp pht vng nh Khi gn nhng thuc tnh (nu c) Cho php truy cp nhng thuc tnh v phng thc
Destructor
Tin trnh hy mt i tng gi l Destructor Mt Destructor:
Tnh Lu Tr
Tnh lu tr l kh nng ca i tng c th lu li d liu ca n sau khi b hy
Tnh K Tha
LP SINH VIN LP NHN VIN
Tn a ch im mn 1 im mn 2 Nhp tn Nhp a ch Nhp im Tnh tng s im Tn a ch Lng Chc v Nhp tn Nhp a ch Nhp lng Tnh lng
LP KHCH HNG
Tn a ch Sn phm mua c Nhp tn Nhp a ch Nhp m sn phm Lp ha n
L c ch cho php mt lp chia s nhng thuc tnh v nhng hnh ng nh ngha trong mt hoc nhiu lp khc L lp tha k t lp khc
Lp con
Lp cha
L lp t mt lp khc tha k cc ng x ca n
a tha k
Khi mt lp con tha k t hai hoc nhiu lp
Tnh a Hnh
Tnh a hnh l thuc tnh cho php mt hnh ng ng x khc nhau trn cc lp khc nhau
Hnh ng Display
Text
Line
Picture
TNG KT
Tip cn hng i tng a ra mt gii php ton din cho mt bi ton c th Tru tng d liu l mt tin trnh xc nh v tp hp cc tnh cht v cc hnh ng c quan h vi mt thc th c th Lp m t mt thc th, cn i tng l mt thc th thc t Constructor v Destructor Tnh lu tr, bao bc d liu, tnh k tha v a hnh
Chng 1
Gii thiu
S pht trin ca Java Hng ti ngi dng Ging vi C / C++
Cc c trng ca Java
Java compiler
Java interpreter
Bytecode compiler
Machine code
28
Applets ng dng c lp (console Application) ng dng giao din (GUI Application) Servlet ng dng c s d liu
My o Java
L mt phn mm da trn c s my tnh o L tp hp cc lnh logic xc nh hot ng ca my tnh c xem nh l mt h iu hnh thu nh N thit lp lp tru tng cho: Phn cng bn di H iu hnh M bin dch
B cng c JDK
Trnh bin dch, 'javac'
Cc gi chun ca Java
java.lang General support java.applet - Creating applets for the web java.awt - Graphics and graphical user interfaces java.io java.util Utilities java.net - Network communication java.awt.event java.rmi java.security java.sql
Chng 2
Cc thnh phn c bn
1. TP K T CA JAVA 2. T KHO 3. TN, LI CH THCH 4. CU LNH V DU CHM CU 5. CU TRC CA CHNG TRNH JAVA 6. MT S CHNG TRNH JAVA MU
Tp k t ca java
Mi ngn ng u c xy dng trn b k t. B k t ca Java nh sau: + Cc ch ci in hoa: A, B, C, Y, Z + Cc ch ci in thng: a, b, c, y, z + Cc ch s: 0, 1, 2, ,9 + Cc du cu: , ; : / ? . [ ] { }! ~ @ # $ % ^ & * ( ) -+=<> + Cc du ngn cch khng nhn thy: du cch, du tab, du xung hng enter + Du gch ni di _ Ch : + Java phn bit ch in hoa v ch in thng. + C th dng cc k t khc nh , , , , , hay c ting Vit trong chng trnh Java
B t kha ca Java
Tn v Li ch thch
* Tn :
- Tn dng xc nh cc i lng khc nhau trong mt chng trnh. - Mi tn c s dng trong chng trnh u phi c khai bo. - Tn hp l l dy k t lin nhau, c th gm cc ch ci (a..,z, A..,Z), cc ch s (0..9), k t gch di (_). - Tn phi bt u bng ch ci hoc du gch di. - Tn khng c trng vi t kho. V d : Nghiem_x, hoan_doi, y_1, y2,.. l tn hp l.
Tn v Li ch thch
* Li ch thch :
- Khng c tc dng to ra m ca chng trnh, gip d dng trong vic tm kim, kim tra, sa chng trnh - Li ch thch c th c t bt k u trong chng trnh - Cch ghi li ch thch: Cch 1 : Ch thch cho nhiu dng /* li ch thch -------------*/ Cch 2 : Ch thch cho mt dng // li ch thch
Cu lnh v Du chm cu
Mt cu lnh thng gm phn m t d liu v phn lnh theo quy nh ca Java. C hai loi: + Cu lnh n gin: l nhng lnh khng cha cc lnh khc : lnh gn, lnh gi phng thc, ... + Cu lnh cu trc: gm khi lnh, lnh r nhnh, lnh lp Khi lnh l gm nhiu lnh c t trong du { } Cc cu lnh cch nhau bi du ; Du chm phy ; dng ngn cch cc lnh, ngha l cui mi lnh, mi khai bo u c chm phy
Cu lnh v Du chm cu
php gn cu lnh n gin li gi phng thc
lnh nhy
cu lnh
khi lnh if (...) else ... switch ...
cu lnh cu trc
lnh la chn
lnh lp
method body
} }
method header
45
Kiu d liu
Kiu d liu c s (Primitive Data Types) Kiu d liu tham chiu (Reference data types)
Kiu d liu c s
4 kiu integers:
byte, short, int, long
2 kiu s thc:
float, double
1 kiu characters:
char
1 kiu boolean :
boolean
Kiu d liu c s
Type byte short int long float double Storage 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Min Value -128 -32,768 -2,147,483,648 < -9 x 1018 Max Value 127 32,767 2,147,483,647 > 9 x 1018
+/- 3.4 x 1038 with 7 significant digits +/- 1.7 x 10308 with 15 significant digits
Characters
Character literals are delimited by single quotes:
'a' 'X' '7' '$' ',' '\n'
57
Boolean
A boolean value represents a true or false condition A boolean can also be used to represent any two states, such as a light bulb being on or off The reserved words true and false are the only valid values for a boolean type
boolean done = false;
58
Cc ton t
Cc loi ton t:
Ton t s hc (Arithmetic operators) Ton t dng Bit (Bitwise operators) Ton t so snh (Relational operators) Ton t logic (Logical operators) Ton t iu kin (Conditional operator) Ton t gn (Assignment operator)
+= -= *= /= %=
Th t u tin ca cc ton t Th t 1. 2. 3. 4. 5. 6.
Ton t trong ngoc tnh trc Cc ton t n nh +,-,++,-Cc ton t s hc v cc ton t dch nh *,/,+,-,<<,>> Cc ton t quan h nh >,<,>=,<=,= =,!= Cc ton t logic v Bit nh &&,II,&,I,^ Cc ton t gn nh =,*=,/=,+=,-=
Operator Precedence
What is the order of evaluation in the following expressions?
a + b + c + d + e 1 2 3 4 a - b / c + d * e 3 1 4 2
a / (b + c) - d % e 2 1 4 3
a / (b * (c + (d - e))) 4 3 2 1
Assignment Revisited
The assignment operator has a lower precedence than the arithmetic operators
First the expression on the right hand side of the = operator is evaluated answer = 4 sum / 4 + MAX * lowest; 1 3 2
Then the result is stored in the variable on the left hand side
Assignment Revisited
The right and left hand sides of an assignment statement can contain the same variable
First, one is added to the original value of count count = count + 1;
Then the result is stored back into count (overwriting the original value)
Khai bo mng
* Mng mt chiu:
datatype identifier [ ]; datatype identifier [ ] = new datatype[size]; datatype identifier [ ]= {value1,value2,.valueN};
Lp trong Java
// { comments about the class public class MyProgram
class header
class body
79
Lp trong Java
C php khai bo lp (Class)
class tnlp { kiu tnbin; : met_datatype tnphngthc([dsthams]) : }
Cc lp ni (Nested Classes)
Mt lp c nh ngha bn trong mt lp khc. Lp c gi l lp ni (Nesting) Cc kiu lp ni: Static Non-static
Nhng phng thc c np chng l mt hnh thc a hnh trong qu trnh bin dch (compile time)
C mt trong lp cha (superclass) cng nh lp k tha (subclass) c nh ngha li trong lp k tha (subclass)
Nhng phng thc c ghi l mt hnh thc a hnh trong qu trnh thc thi (Runtime)
C cng tn vi lp dn xut (subclass) Nu lp dn xut mun gi hm constructor ca lp c s th cu lnh gi hm constructor ca lp c s phi l cu lnh u tin trong hm constructor ca lp dn xut Dng t kho super
Cc lnh iu khin
iu khin r nhnh:
Mnh if-else Mnh switch-case
Vng lp (Loops):
Vng lp while Vng lp do-while Vng lp for
Lnh if-else
C php
if (condition) { action1 statements; } else { action2 statements; }
Lnh switch-case
C php
switch (expression) { case 'value1': action1 statement(s); break; case 'value2': action2 statement(s); break; : : case 'valueN': actionN statement(s); break; default: default_action statement(s); }
Lnh lp while
C php
while(condition) { action statements; : : }
Lnh lp do-while
C php
do { action statements; : : } while(condition);
Vng lp for
C php
for(initialization statements ; condition ; increment statements) { action statements; : : }
Chng 3
Gii thiu
Nhng thnh phn c bn ca chng trnh Java: Gi (Packages) Giao din (Interfaces) Nhng phn ca mt chng trnh Java: Lnh khai bo gi(package ) Lnh ch nh gi c dng (Lnh import) Khai bo lp public (mt file java ch cha 1 lp public class) Cc lp khc (classes private to the package)
Interfaces
Interface chnh l lp abstract thun tu Khai bo nhng phng thc m lp s dng Trong Java 1 lp ch c th dn xut t 1 lp duy nht ti cng mt thi im, nhng c th dn xut cng lc nhiu Interface Trong Interface khng cha nhng phng thc c th (concrete methods) interface cn phi c implements.
Cc bc to interface
nh ngha Interface Bin dch Interface Implements Interface Tnh cht ca interface:
Tt c phng thc trong interface phi l public. Cc phng thc phi c nh ngha trong lp dn xut interface .
S dng Interface
Interface khng th dn xut t lp khc, nhng c th dn xut t nhng interface khc Nu mt lp dn xut t mt interface m interface dn xut t cc interface khc th lp phi nh ngha tt c cc phng thc c trong cc interface . Nu khng lp tr thnh lp abstract Khi nh ngha mt interface mi c ngha l mt kiu d liu tham chiu mi c to ra.
Gi (Packages)
Gi c xem tng t nh th mc lu tr nhng lp, nhng interfaces v cc gi con khc.
Cho php t chc cc lp vo nhng n v nh hn Gip trnh c tnh trng trng lp khi t tn lp, tn interfaces . Cho php bo v cc lp. Tn gi (Package) c th c dng nhn dng chc nng ca cc lp.
Nhng lnh khc phi vit pha di dng khai bo gi l mnh import, k n l cc lnh nh
ngha lp i tng
Cc bc to ra gi (Package)
Khai bo gi Import nhng gi chun cn thit Khai bo v nh ngha cc lp i tng c trong gi Lu thnh tp tin .java, v bin dch nhng lp i tng c nh ngha trong gi.
S dng nhng gi do ngi dng nh ngha (user-defined packages) M ngun ca nhng chng trnh ny phi cng th mc ca gi do ngi dng nh ngha. Nu khng ta phi thit lp ng dn. nhng chng trnh Java khc s dng nhng gi ny, import gi vo trong m ngun Import nhng lp i tng cn dng Import ton b gi To tham chiu n nhng thnh vin ca gi
Thit lp ng dn - xc lp CLASSPATH L danh sch cc th mc, gip cho vic tm kim cc tp tin lp i tng tng ng Nn xc lp CLASSPATH trong lc thc thi (runtime), v nh vy n s xc lp ng dn cho qu trnh thc thi hin hnh
Gi java.lang
Gi java.lang c import mc nh. Nhng lp Wrapper cho cc kiu d liu nguyn thy:
Lp String
Phng thc khi to (Constructor):
String str1 = new String(); String str2 = new String(Hello World); char ch[ ] = {A,B,C,D,E}; String str3 = new String(ch); String str4 = new String(ch,0,2);
String Pool
String Pool i din cho tt c cc k t c to ra trong chng trnh Khi nim String Pool
Lp StringBuffer
Cung cp nhng phng thc khc nhau thao tc trn i tng string (chui k t) Nhng i tng ca lp ny kh linh hot Cung cp nhng phng thc khi to (constructor) c np chng (overloaded) Nhng phng thc ca lp StringBuffer:
append( ) // noi chuoi insert( ) //chen charAt( )// ktra ky tu ko? setCharAt( ) //thietlapktu setLength( ) getChars( ) reverse( ) //dao chuoi
Lp java.lang.Math
abs() ceil()// lam tron tren floor()// lam tron duoi max() min() round() random() sqrt() sin() cos() tan()
Lp Runtime
ng gi (Encapsulates) mi trng thc thi Dng qun l b nh, v thi hnh nhng tin trnh cng thm Phng thc:
exit(int) freeMemory( ) getRuntime( ) gc( ) totalMemory( ) exec(String)
Lp System
Cung cp nhng lung chun nh nhp (Input), xut (Output) v cc lung li(Error Streams) Cung cp kh nng truy xut n nhng thuc tnh ca h thng thc thi Java, v nhng thuc tnh mi trng nh phin bn, ng dn, nh cung cp Phng thc: exit(int) gc() getProperties() setProperties() currentTimeMillis() arraCopy(Object, int, Object, int, int)
Lp Class
i tng ca lp ny che giu trng thi thc thi ca i tng trong mt ng dng Java i tng ca lp ny c th to ra bng 1 trong 3 cch sau:
S dng phng thc getClass( ) ca i tng S dng phng thc tnh forName( ) ca lp to ra mt i tng ca lp trong lc t tn cho lp S dng i tng ClassLoader np mt lp m i
Lp Object
L lp cha ti cao ca tt c cc lp Phng thc:
Gi java.util
Cung cp phn ln nhng lp Java hu dng v thng xuyn cn n trong hu ht cc ng dng Gii thiu nhng lp tru tng sau:
Lp Hashtable
Dn xut t lp tru tng Dictionary Dng ni kt nhng kha vo nhng gi tr c th Phng thc khi to Hashtable:
Lp Random
Nhng phng thc nhn gi tr ngu nhin:
nextDouble( ) nextFloat( ) nextGaussian( ) nextInt( ) nextLong( ) Phng thc khi to (Constructors): random() random(long)
Lp Vector
Cung cp kh nng co gin cho mng khi thm phn t vo mng Lu tr nhng thnh phn ca kiu Object Mt Vector ring r c th lu tr nhng phn t khc nhau, l nhng instance ca nhng lp khc nhau Phng thc khi to (Constructors):
Vector(int) Vector(int, int) Vector()
Lp StringTokenizer
C th c dng tch mt chui thnh nhng thnh phn cu thnh ca n (constituent tokens) K t phn cch c th c ch nh khi mt i tng StringTokenizer c khi to Phng thc khi to (Constructors):
StringTokenizer(String) StringTokenizer(String, String) StringTokenizer(String, String, Boolean)
Chng 4
X l bit l
Mc ch ca vic x l bit l
Gim thiu vic kt thc bt thng ca h thng v ca chng trnh. V d, thao tc xut/nhp trong mt tp tin, nu vic chuyn i kiu d liu khng thc hin ng, mt bit l s xy ra v chng trnh b hy m khng ng tp tin. Lc tp tin s b h hi v cc ngun ti nguyn c cp pht cho tp tin khng c thu hi li cho h thng.
X l bit l
Khi mt bit l xy ra, i tng tng ng vi bit l s c to ra. i tng ny sau c truyn ti phng thc ni m bit l xy ra. i tng ny cha cc thng tin chi tit v bit l. Thng tin ny c th nhn c v x l. Lp throwable m Java cung cp l lp trn nht ca lp bit l.
M hnh x l bit l
M hnh c bit n l m hnh catch and throw Khi mt li xy ra, bit l s uc chn v c vo mt khi. T kha x l bit l:
Khi finally
Thc hin tt c cc vic thu dn khi bit l xy ra C th s dng kt hp vi khi try Cha cc cu lnh thu hi ti nguyn v cho h thng hay lnh in ra cc cu thng bo:
Toolkit
AWT l tp hp cc lp Java cho php chng ta to mt GUI Cung cp cc thnh phn khc nhau to chng trnh GUI nh:
Containers Components Layout managers Graphics v drawing capabilities Fonts Events
Components
Tt c cc thnh phn cu to nn chng trnh GUI c gi l component. V d Containers, textfields, labels, checkboxes, textareas scrollbars, scrollpanes, dialog
Containers
L thnh phn m c th cha cc thnh phn khc C cc frames, panels,latches, hooks Java.awt cha mt lp c tn l Container. Lp ny c 2 lp dn xut trc tip v khng trc tip gm:
Frames Panels
Frames
L cc ca s L lp con ca lp Windows c hin th trong mt ca s v c ng vin
Panels
L cc vng cha trong mt ca s. Hin th trong mt ca s m trnh duyt hoc appletviewer cung cp v khng c ng vin. c s dng nhm mt s cc thnh phn Mt panel khng th nhn thy v th chng ta cn phi thm n vo frame.
Dialog
L mt lp con ca lp Window i tng dialog c cu trc nh sau :
Frame myframe = new Frame(My frame); String title = Title; boolean modal = true; Dialog dlg = new Dialog( myframe, title, modal);
Cc Components khc
V d textfields, labels, checkboxes, textareas scrollbars, scrollpanes, dialog
Label
c dng hin th chui (String) Cc hm to dng:
Cc phng thc:
setFont(Font f) setText(String s) getText( )
TextField
L iu khin text, cho php hin th text hoc cho user nhp d liu vo. Cc hm dng:
Cc phng thc:
setEchoChar(char) setText(String s) getText( ) setEditable(boolean) isEditable( )
TextArea
c dng khi chui hin th c t hai dng tr ln.
TextArea (tt)
Cc hm dng:
TextArea( ) TextArea(int rows, int cols ) TextArea(String text) TextArea(String text, int rows, int cols)
Button
Cc nt n l cch d nht ly cc s kin ca ngi dng. Cc hm to dng:
Checkboxes v RadioButtons
Checkboxes cho php ngi dng a ra nhiu chn la Radiobuttons ch cho php ngi dng duy nht mt chn la Cc hm dng to checkbox:
Choice
Lp Choice cho php ta to danh sch c nhiu chn la V d
Choice colors=new Choice( ); colors.addItem(Red); colors.addItem(Green);
Layout Manager
Cc loi layout manager khc nhau:
Flow Layout Border Layout Card Layout Grid Layout GridBag Layout
FlowLayout
FlowLayout l layout manager mc nh cho
cc applet v cc panel Vi FlowLayout cc component s c sp xp t gc tri trn n gc phi di ca mn hnh theo tng hng. Cc constructor:
FlowLayout mylayout = new FlowLayout(); FlowLayout exLayout = new flowLayout(FlowLayout.RIGHT);
BorderLayout
BorderLayout mc nh cho Window, Frame v Dialog Trnh qun l ny c th b tr container thnh 5 vng, NORTH, EAST, SOUTH, WEST v CENTER. V d: thm mt thnh phn vo vng North ca container
Button b1= new Button(North Button); setLayout(new BorderLayout( )); add(b1, BorderLayout.NORTH);
CardLayout
C th lu tr mt danh sch cc kiu layout khc nhau Mi layout c xem nh mt th (card) Th thng l i tng Panel Mt thnh phn c lp nh button s iu khin cc th c t pha trn nht Cc bc to CardLayout:
GridLayout
H tr vic chia container thnh mt li Cc thnh phn c b tr trong cc ca li. Mt li nn cha t nht mt thnh phn Kiu layout ny c s dng khi tt c cc components c cng kch thc Hm constructor
GridLayout gl = new GridLayout(no. of rows, no. of columns);
GridBagLayout
B tr cc thnh phn mt cch chnh xc Cc thnh phn khng cn c cng kch thc Cc thnh phn c sp xp trong mt li cha cc dng v cc ct Th t t cc thnh phn khng tun theo hng t tri-sang-phi v trnxung-di Hm constructor
GridBagLayout gb = new GridBagLayout( );
GridBagLayout
s dng layout ny, bn cn phi bit thng tin v kch c v cch b tr ca cc thnh phn Lp GridBagLayoutConstraints lu tr tt c cc thng tin m lp GridLayout yu cu: V tr v kch thuc mi thnh phn
GridLayout
BorderLayout
Cc thnh phn giao din (t hn 5) c t vo cc v tr theo cc hng: north (bc), south (nam), west (ty), east (ng) v center (trung tm)). Cch sp xp ny l mc nh i vi lp Window, Frame v Dialog.
GridBagLayout
Cho php t cc thnh phn giao din vo li hnh ch nht, nhng mt thnh phn c th chim nhiu .
<Tip theo>
Ngc li, khi cn loi ra khi phn t cha mt thnh phn giao din th s dng cc hm sau: void remove(int index) void remove(Component comp) void removeAll()
Lp FlowLayout
Lp FlowLayout c cc hm to lp sp hng cc thnh phn giao din: FlowLayout() FlowLayout(int aligment) FlowLayout(int aligment, int horizongap, int verticalgap) public static final int LEFT public static final int CENTER public static final int RIGHT
<Tip theo>
Lp GridLayout Lp GridLayout cung cp cc hm to lp sp hng cc thnh phn giao din: GridLayout() GridLayout(int rows, int columns) GridLayout(int rows, int columns, int hoiongap, int verticalgap) To ra mt li hnh ch nht c rows columns c khong cch gia cc hng cc ct l horizongap, verticalgap. Mt trong hai i s rows hoc columns c th l 0, nhng khng th c hai, GridLayout(1,0) l to ra li c mt hng.
<Tip theo>
V d: M t cch s dng GridLayout import java.awt.*; import java.applet.*; public class GridLayoutApplet extends Applet { public void init() { //Cread a list of colors Label xLabel = new Label("X coordinate: "); Label yLabel = new Label("Y coordinate: "); TextField xInput = new TextField(5); TextField yInput = new TextField(5);
<Tip theo>
// To ra li hnh ch nht c 4 v t layout sp xp cc thnh phn // xLabel, xInput, yLabel, yInput
setLayout(new GridLayout(2,2)); add(xLabel); add(xInput); add(yLabel); add(yInput); } } // t xLabel vo th nht // t xInput vo th hai // t yLabel vo th ba // t yInput vo th t
<Tip theo>
V d: t mt nt Button c tn V trn (NORT), trng vn bn Hin th thng bo di (SOUTH) v hai thanh trt (SCROLLBAR) hai bn cnh (WEST v EAST). import java.awt.*; import java.applet.*; public class BorderLayoutApplet extends Applet { public void init() { TextField msg = new TextField("Hien thi thong bao"); msg.setEditable(false); Button nutVe = new Button("Ve"); Canvas vungVe = new Canvas(); vungVe.setSize(150, 150);// t kch thc cho vungVe v tranh vungVe.setBackground( Color.white); // t mu nn l trng
<Tip theo>
Scrollbar sb1=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100); Scrollbar sb2=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100);
setLayout(new BorderLayout());
add(nutVe, BorderLayout.NORTH);// t nutVe trn (NORT) add(msg, BorderLayout.SOUTH); // t msg di (SOUTH) add(vungVe,BorderLayout.CENTER);// t vungVe gia (CENTER) add(sb1, BorderLayout.WEST); add(sb2, BorderLayout.EAST); // t sb1 bn tri (WEST) // t sb2 bn phi (EAST)
} }
X l s kin
Cc ng dng vi GUI thng c hng dn bi cc s kin (event). Vic nhn mt nt, m, ng cc Window hay g cc k t t bn phm, v.v. u to ra cc s kin (event) v c gi ti cho chng trnh ng dng. Cc s kin (Events) c x l bng cc cng c sau: Abstract Windowing Toolkit Trnh duyt. Cc trnh x l s kin do ngi dng to ring. Cc ng dng cn ng k trnh x l s kin vi i tng Cc trnh x l ny c gi khi c mt s kin tng ng xy ra
X l cc s kin
Event Listener s lng nghe mt s kin c th m mt i tng to ra Mi event listener cung cp cc phng thc x l cc s kin ny Lp c ci t listener cn nh ngha nhng phng thc ny
X l cc s kin
Cc bc cn tun th s dng m hnh Event Listener:
Ci t Listener tng ng Nhn din c tt c cc thnh phn to s kin Nhn din c tt c cc s kin c x l Ci t cc phng thc ca listener, v vit cc on m x l s kin trong cc phng thc
KeyEvent
ActionListener AdjustmentListener ComponentListener FocusListener ItemListener WindowListener TextListener MouseListener MouseMotionListener KeyListener
X l cc s kin
Trong Java cc s kin c th hin bng cc i tng. Lp c s nht, lp cha ca tt c cc lp con ca cc s kin l lp java.util.EventObject. Cc lp con ca AWTEvent c chia thnh hai nhm: 1. 2. Cc lp m t v ng ngha ca cc s kin Cc lp s kin mc thp
Cc lp x l s kin
java.lang.Object java.util.EventObject java.awt.AWTEvent java.awt.event
ActionEvent
AdjustmentEvent
ComponentEvent
ItemEvent
TextEvent
ContainerEvent
FocusEvent
InputEvent {abstract}
PaintEvent
WindowEvent
KeyEvent
MouseEvent
1. Cc lp ng ngha
a/ ActionEvent
S kin ny c pht sinh bi nhng hot ng thc hin trn cc thnh phn ca GUI. Cc thnh phn gy ra cc s kin hnh ng bao gm:
Button - khi mt nt button c kch hot List - khi mt mc trong danh sch c kch hot p MenuItem - khi mt mc trong thc n c chn TextField - khi g phm ENTER trong trng vn bn (text). Lp ActionEvent c cc hm: String getActionCommand() Cho bit tn ca lnh tng ng vi s kin xy ra, l tn ca nt, mc hay text. b/ AdjustmentEvent Thnh phn gy ra s kin cn chnh (adjustment): Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar. Lp ny c hm: int getValue() Cho li gi tr hin thi c xc nh bi ln cn chnh sau cng.
<TT>
c/ ItemEvent Cc thnh phn ca GUI gy ra cc s kin v cc mc gm c: Checkbox - khi trng thi ca hp kim tra Checkbox thay i CheckboxMenuItem - khi trng thi ca hp kim tra Checkbox ng vi mc ca thc n thay i, Choice - khi mt mc trong danh sch c chn hoc b loi b List - khi mt mc trong danh sch c chn hoc b loi b. Lp ItemEvent c hm: Object getItem() Cho li i tng c chn hay va b loi b. d/ TextEvent Cc thnh phn ca GUI gy ra cc s kin v text gm c: TextArea - khi kt thc bng nhn nt ENTER, TextField - khi kt thc bng nhn nt ENTER.
<Tip theo>
Kiu s kin Ngun gy ra s kin Cc hm n nhn v di di cc s kin Giao din Listener tng ng
AcitionEvent
AdjustmentEvent ItemEvent
Button List TextField Scrollbar Choice Checkbox CheckboxMen uItem List TextArea TexField
AcitionListener
TextEvent
2. Cc s kin mc thp
a/ ComponentEvent S kin ny xut hin khi mt thnh phn b che giu, hin th hay thay i li kch thc. Lp ComponentEvent c hm: Component getComponent() Cho li i tng tham chiu kiu Component. b/ ContainerEvent S kin ny xut hin khi mt thnh phn c b sung hay b loi b khi phn t cha (Container). c/ FocusEvent S kin ny xut hin khi mt thnh phn nhn c mt nt t bn phm. d/ KeyEvent Lp KeyEvent l lp con ca lp tru tng InputEvent c s dng x l cc s kin lin quan n cc phm ca bn phm. int getKeyCode() i vi cc s kin KEY_PRESSED hoc KEY_RELEASED, hm ny c s dng nhn li gi tr nguyn tng ng vi m ca phm trn bn phm. char getKeyChar() i vi cc s kin KEY_PRESSED, hm ny c s dng nhn li gi tr nguyn, m Unicode tng ng vi k t ca bn phm.
<Tip theo>
e/ MouseEvent Lp MouseEvent l lp con ca lp tru tng InputEvent c s dng x l cc tn hiu ca chut. Lp ny c cc hm: int getX() int getY() Point getPoint() Cc hm ny c s dng nhn li ta x, y ca v tr lin quan n s kin do chut gy ra. void translatePoint(int dx, int dy) Hm translate() c s dng chuyn ta ca s kin do chut gy ra n (dx, dy). int getClickCount() Hm getClickCount() m s ln kch chut. f/ PaintEvent S kin ny xut hin khi mt thnh phn gi hm paint()/ update() v. g/ WindowEvent S kin loi ny xut hin khi thao tc vi cc Window. Lp ny c hm: Window getWindow() Hm ny cho li i tng ca lp Window ng vi s kin lin quan n Window xy ra.
ComponentEvent ContainerEvent
MouseMotionListener
WindowEvent
Window
WindowListener
<Tip theo>
V d: Xy dng ng dng c giao din ha GUI
<Tip theo>
import java.awt.*; import java.awt.event.*; import java.applet.*; interface IGeometryConstants { // nh ngha Interface gm cc hng cho trc int SQUARE = 0; int CIRCLE = 1; int ELLIPSE = 2; String[] shapeNames = {"Square", "Circle" , "Ellipse"}; int SMALL = 0; int MEDIUM = 1; int LARGE = 2; String[] sizeNames = {"Small", "Medium" , "Large"}; } public class DemoApplet extends Applet implements IGeometryConstants { // Khai bo mt Panel cha cc Checkbox tng ng vi cc loi hnh shape Panel shapePanel;// Khai bo mt Panel CheckboxGroup shapeCBG; // Khai bo mt CheckboxGroup Checkbox squareCB; // Khai bo mt Checkbox ng vi hnh vung Checkbox circleCB; // Khai bo mt Checkbox ng vi hnh trn Checkbox ellipseCB; // Khai bo mt Checkbox ng vi hnh ellipse // Khai bo mt Panel cha cc Label v cc TextField Panel xyPanel; // Khai bo mt Panel xyPanel Label xLabel; // Khai bo mt Label xLabel TextField xInput; // Khai bo mt TextField xInput Label yLabel; // Khai bo mt Label yLabel 192 TextField yInput; // Khai bo mt TextField yInput
<Tip theo>
// Khai bo mt Panel cha cc Label , Choice v Checkbox Panel sizePanel; Label sizeLabel; Choice sizeChoices; Checkbox fillCB; // Khai bo mt Panel cha shape, coordinates, size and fill Panel leftPanel Panel leftPanel; // Khai bo mt Panel cha Massage display, draw button and canvas Panel rightPanel; Button drawButton; DrawRegion drawRegion; TextField messageDisplay; // nh ngha li hm init() public void init() { makeShapePanel(); makeXYPanel(); makeSizePanel(); makeLeftPanel(); makeRightPanel(); // Gi hm x l cc s kin addListeners(); // a cc Panel vo h thng add(leftPanel); add(rightPanel); }
<Tip theo>
// a cc thnh phn v cc shape vo shapePanel void makeShapePanel() { shapePanel = new Panel(); shapeCBG = new CheckboxGroup(); squareCB = new Checkbox(shapeNames[SQUARE], shapeCBG, true); circleCB = new Checkbox(shapeNames[CIRCLE], shapeCBG, false); ellipseCB = new Checkbox(shapeNames[ELLIPSE], shapeCBG, false); shapePanel.setLayout(new FlowLayout()); shapePanel.add(squareCB); shapePanel.add(circleCB); shapePanel.add(ellipseCB); } // a cc thnh phn v cc x,y coordinates vo xyPanel void makeXYPanel() { xyPanel = new Panel(); xLabel = new Label("X Coordinate:"); yLabel = new Label("Y Coordinate:"); xInput = new TextField(5); yInput = new TextField(5); xyPanel.setLayout(new GridLayout(2,2)); xyPanel.add(xLabel); xyPanel.add(xInput); xyPanel.add(yLabel); xyPanel.add(yInput); }
<Tip theo>
// a cc thnh phn v size v fill vo sizePanel void makeSizePanel() { sizePanel = new Panel(); sizeLabel = new Label("Size:"); sizeChoices = new Choice(); sizeChoices.add(sizeNames[0]); sizeChoices.add(sizeNames[1]); sizeChoices.add(sizeNames[2]); fillCB = new Checkbox("Fill", false); sizePanel.setLayout(new FlowLayout()); sizePanel.add(sizeLabel); sizePanel.add(sizeChoices); sizePanel.add(fillCB); } // a cc thnh phn vo leftPanel void makeLeftPanel(){ leftPanel = new Panel(); leftPanel.setLayout(new BorderLayout()); leftPanel.add(shapePanel, "North"); leftPanel.add(xyPanel, "Center"); leftPanel.add(sizePanel, "South"); }
<Tip theo>
// a cc thnh phn vo rightPanel void makeRightPanel(){ rightPanel = new Panel(); messageDisplay = new TextField("MESSAGE DISPLAY"); messageDisplay.setEditable(false); messageDisplay.setBackground(Color.yellow); drawButton = new Button("Draw"); drawButton.setBackground(Color.lightGray); drawRegion = new DrawRegion(); drawRegion.setSize(150, 150); drawRegion.setBackground(Color.white); rightPanel.setLayout(new BorderLayout()); rightPanel.add(drawButton, BorderLayout.NORTH); rightPanel.add(messageDisplay, BorderLayout.SOUTH); rightPanel.add(drawRegion, BorderLayout.CENTER); }
<Tip theo>
// X l cc s kin tng ng vi cc vic thc hin trn cc thnh phn ha void addListeners(){ drawButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt){ int shape, xCoord, yCoord, width; messageDisplay.setText(""); if(squareCB.getState()) shape = SQUARE; else if (circleCB.getState()) shape = CIRCLE; else if (ellipseCB.getState()) shape = ELLIPSE; else { messageDisplay.setText("Unknow shape"); return; } try{ xCoord = Integer.parseInt(xInput.getText()); yCoord = Integer.parseInt(yInput.getText()); }catch(NumberFormatException e){ messageDisplay.setText("Illegal coordinate"); return; }
<Tip theo>
switch(sizeChoices.getSelectedIndex()){ case SMALL: width = 30; break; case MEDIUM: width = 60; break; case LARGE: width = 120; break; default: messageDisplay.setText("Unknow size"); return; } messageDisplay.setText("Drawing..."+shapeNames[shape]); drawRegion.doDraw(shape,xCoord,yCoord, fillCB.getState(),width); } }); xInput.addTextListener(new TextListener(){ public void textValueChanged(TextEvent evt){ checkTF(xInput); } }); yInput.addTextListener(new TextListener(){ public void textValueChanged(TextEvent evt){ checkTF(yInput); } }); }// Kt thc hm addListener()
198
<Tip theo>
void checkTF(TextField tf){ messageDisplay.setText(""); try{ Integer.parseInt(tf.getText()); }catch(NumberFormatException e){ messageDisplay.setText("Illegal coordinate "); } } } // nh ngha lp DrawRegion m rng lp Canvas v s dng cc hng giao din class DrawRegion extends Canvas implements IGeometryConstants{ private int shape,xCoord, yCoord; private boolean fillFlag; private int width; public DrawRegion(){ setSize(150, 150); setBackground(Color.white); } // nh ngha hm doDraw() v public void doDraw(int h, int x, int y, boolean f, int w){ this.shape = h; this.xCoord = x; this.yCoord = y; this.fillFlag = f; this.width = w; repaint(); }
<Tip theo>
public void paint(Graphics g){ switch(shape){ case SQUARE: if(fillFlag) g.fillRect(xCoord, yCoord, width,width); else g.drawRect(xCoord, yCoord, width,width); break; case CIRCLE: if(fillFlag) g.fillOval(xCoord, yCoord, width,width); else g.drawOval(xCoord, yCoord, width,width); break; case ELLIPSE: if(fillFlag) g.fillOval(xCoord,yCoord,width,width/2); else g.drawOval(xCoord, yCoord, width,width/2); break; } } }
Menus
Cc loi menu :
Menubar MenuItems
Chng VI
Applets
Applets
L mt chng trnh Java m chy vi s h tr ca trnh duyt web hoc appletviewer Tt c cc applets l lp con ca lp Applet to mt applet, bn cn import gi sau:
java.applet
Cu trc applet
nh ngha mt applet t bn s kin xy ra trong qu trnh thc thi i vi mi s kin c nh ngha bi mt phng thc tng ng. Cc phng thc:
init( ) start( ) stop( ) destroy( )
Cc phng thc init(), start(), stop(), destroy(), and paint() c tha k t applet. Mi phng thc ny mc nh l rng. V th cc phng thc ny phi c np chng.
L p h a
c cung cp bi gi AWT Cung cp mt tp hp cc phng thc v nh sau:
Oval Rectangle Square Circle Lines Text in different fonts
Graphical Background
Cc phng thc v nn :
getGraphics( ) repaint( ) update(Graphics g) paint(Graphics g)
V cc hnh th
Phng thc c s dng v ng thng nh sau
C php drawLine(int x1, int y1, int x2, int y2);
draw3DRect(int xCoord, int yCoord, int width, int height, boolean raised); drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight); fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight);
Drawing PolyLines
Cc phng thc c s dng v nhiu on thng
C php
drawPolyline(int xArray[ ], int yArray[ ], int totalPoints); g.setFont(new Font("Times Roman", Font.BOLD,15));
V v t cc hnh a gic
Cc phng thc v v t cc hnh a gic C php
Mu
Java s dng mu RGB Bng cc gi tr mu
Element Red Green Blue
C php ca hm dng to mt mu
color(int red, int green, int blue);
Bng trnh by cc gi tr mu RGB thng thng Color White Light Gray Gray Dark Gray Black Pink Orange Yellow Magenta Red 255 192 128 64 0 255 255 255 255 Green 255 192 128 64 0 175 200 255 0 Blue 255 192 128 64 0 175 0 0 255
Font
Gi java.awt package cung cp bi lp Font Cc phng thc ca lp Font:
V d
Font f1 = new Font("SansSerif", Font.ITALIC, 16); g.setFont(f1);
Lp FontMetrics
o cc k t khc nhau hin th trong cc font khc nhau. Vic o bao gm height, baseline, ascent, descent v leading ca font. N khng c th v n l mt lp tru tng
Kiu v
C 2 kiu v. XOR
setXORMode(Color c)
Paint
setPaintMode( )
Chng VII
Lp trnh a tuyn
Lp trnh a tuyn
a nhim, tin trnh v lung X l a lung trong Java Mc u tin ca lung Vn ng b ho v bi ton tc nghn
<Tip theo>
a nhim c th thc hin c theo hai cch: + Ph thuc vo h iu hnh, n c th cho tm ngng chng trnh m khng cn tham kho cc chng trnh . + Cc chng trnh ch b dng li khi chng t nguyn nhng iu khin cho chng trnh khc. Nhiu h iu hnh hin nay h tr a lung, Java h tr a nhim da trn cc lung v cung cp cc c tnh mc cao cho lp trnh a lung.
a lung (a tuyn)
L kh nng lm vic vi nhiu lung a lung chuyn s dng cho vic thc thi nhiu cng vic ng thi a lung gim thi gian ri ca h thng n mc thp nht.
To v qun l lung
Khi chng trnh Java thc thi hm main() tc l lung main c thc thi. Tuyn ny c to ra mt cch t ng, ti y :
- Cc lung con s c to ra t - N l lung cui cng kt thc vic thc thi. Ngay khi lung main() ngng thc thi, chng trnh b chm dt
<Tip theo>
sleep yield
Non runnable
Waiting Sleeping
New
Blocked
Dead
stop
Mc u tin ca cc lung
Trong Java, mi lung c mt mc u tin thc hin nht nh. Khi chng trnh chnh thc hin s to ra lung chnh, lung cha. Lung ny s to ra cc lung con, v c th tip tc. Theo mc nh, mt lung s k tha mc u tin ca lung cha ca n. Bn c th tng hay gim mc u tin ca lung bng cch s dng hm setPriority(). Mc u tin ca cc lung c th t li trong khong t MIN_PRIORITY (Trong lp Thread c mc nh bng 1) v MAX_PRIORITY (mc nh bng 10), hoc NORM_PRIORITY (mc nh l 5). Lung c mc u tin cao nht tip tc thc hin cho n khi:
+ N nhng quyn iu khin cho lung khc bng cch gi hm yield() + N dng thc hin (b dead hoc chuyn sang trng thi b chn).
Mc u tin ca cc lung
Vn ny sinh l chn lung no thc hin khi c nhiu hn mt lung sn sng thc hin v c cng mt mc u tin cao nht? Ni chung, mt s c s s dng b lp lch la chn ngu nhin, hoc la chn chng thc hin theo th t xut hin. V d: Chng ta hy xt chng trnh hin th cc qu bng mu xanh hoc ny (chuyn) theo nhng ng nht nh. Mi khi nhn nt Blue ball th c 5 lung c to ra vi mc u tin thng thng (mc 5) hin th v di chuyn cc qu bng xanh. Khi nhn nt Red ball th cng c 5 lung c to ra vi mc u tin (mc 7) cao hn mc thng thng hin th v di chuyn cc qu bng . kt thc tr chi bn nhn nt Close.
Mc u tin ca cc lung
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Bounce{ public static void main(String arg[]){ JFrame fr = new BounceFrame(); fr.show(); } } class BounceFrame extends JFrame{ public BounceFrame(){ setSize(300, 200); setTitle("Bong chuyen"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });
Mc u tin ca cc lung
Container contentPane = getContentPane(); canvas = new JPanel(); contentPane.add(canvas, "Center"); JPanel p = new JPanel(); addButton(p, "Blue ball", new ActionListener(){ public void actionPerformed(ActionEvent evt){ for(int i = 0; i < 5; i++){ Ball b = new Ball(canvas, Color.blue); b.setPriority(Thread.NORM_PRIORITY); b.start(); } } }); addButton(p, "Red ball", new ActionListener(){ public void actionPerformed(ActionEvent evt){ for(int i = 0; i < 5; i++){ Ball b = new Ball(canvas, Color.red); b.setPriority(Thread.NORM_PRIORITY + 2); b.start(); } } });
Mc u tin ca cc lung
addButton(p, "Close", new ActionListener(){ public void actionPerformed(ActionEvent evt){ canvas.setVisible(false); System.exit(0); } }); contentPane.add(p, "South"); } public void addButton(Container c, String title, ActionListener a){ JButton b = new JButton(title); c.add(b); b.addActionListener(a); } private JPanel canvas; }
Mc u tin ca cc lung
class Ball extends Thread{ public Ball(JPanel b, Color c){ box = b; color = c; } public void draw(){ Graphics g = box.getGraphics(); g.setColor(color); g.fillOval(x, y, XSIZE, YSIZE); g.dispose(); } public void move(){ if(!box.isVisible()) return; Graphics g = box.getGraphics(); g.setXORMode(box.getBackground()); g.setColor(color); g.fillOval(x, y, XSIZE, YSIZE); x += dx; y += dy; Dimension d = box.getSize(); if(x < 0){ x = 0; dx = -dx; } if(x + XSIZE >= d.width){ x = d.width - XSIZE; dx = -dx; } if(y < 0){ y = 0; dy = -dy; }
Mc u tin ca cc lung
if(y + YSIZE >= d.height){ y = d.height - YSIZE; dy = -dy; } g.fillOval(x, y, XSIZE, YSIZE); g.dispose(); } public void run(){ try{ for(int i = 1; i <= 1000; i++){ move(); sleep(5); } }catch(InterruptedException e){ } } private JPanel box; private static final int XSIZE = 10; private static final int YSIZE = 10; private int x = 0; private int y = 0; private int dx = 2; private int dy = 2; private Color color; }
Mc u tin ca cc lung
Chy chng trnh trn chng ta nhn thy hnh nh nhng qu bng ny nhanh hn v cc lung thc hin chng c mc u tin cao hn. Lu : Cc lung c mc u tin thp hn s khng c c hi thc hin nu nhng lung cao hn khng nhng, hoc nhng bng hm yield(). Nu c nhng lung ang trng thi Runnable m c mc u tin t nht bng mc u tin ca lung va nhng th mt trong s chng c xp lch thc hin. + B lp lch thng xuyn tnh li mc u tin ca cc lung ang thc hin + Tm lung c mc u tin cao nht thc hin.
a tuyn vi Applets
Trong Java ta c th to ra cc tuyn thi hnh song song bng cch trin khai giao din Runnable Java khng h tr k tha bi Mun k tha t mt lp no m li mun a tuyn th bt buc s dng giao din Runnable Cc chng trnh Java da trn Applet thng s dng nhiu hn mt tuyn Trong a tuyn vi Applets, Lp java.applet.Applet l lp con c to ra mt Applet ngi s dng nh ngha Lp con ca Applet khng th dn xut c trc tip t lp Thread. Cch lp con Applet l tuyn:
implements Runnable Truyn i tng Runnable vo hm constructor ca Thread.
S ng b
Khi nhiu tuyn truy cp ti nguyn dng chung Ti nguyn khng th chia x, khi ti nguyn c th b ph hng V d : Mt lung c d liu, trong khi lung khc li thay i Cn cho php mt lung hon thnh tc v ca n, ri cho php lung k tip thc thi
S ng b
Thm nhp cc ti nguyn/d liu bi nhiu tuyn S ng b (Synchronization) S quan st (Monitor)
S ng b
thm nhp s quan st ca mt i tng, lp trnh vin s dng t kha synchronized khi khai bo phng thc. Mi mt i tng s c mt b qun l kha, ch cho mt phng thc synchronized ca i tng chy ti mt thi im Khi mt tuyn ang c thc thi trong phm vi mt phng thc ng b (synchronized), bt k tuyn khc hoc phng thc ng b khc m c gng gi n trong thi gian s phi i
ng b ho
Cc lung chia s vi nhau cng mt khng gian b nh, ngha l chng c th chia s vi nhau cc ti nguyn. Khi c nhiu hn mt lung cng mun s dng mt ti nguyn s xut hin tnh trng cng thng, ch cho php mt lung c quyn truy cp. cho cc lung chia s vi nhau c cc ti nguyn v hot ng hiu qu, lun m bo nht qun d liu th phi c c ch ng b chng.
ng b ho
Mu cht ca s ng b l khi nim monitor (gim st) hay cn gi l semaphore (c hiu) Khi nim semaphore thng c s dng iu khin ng b cc hot ng truy cp vo nhng ti nguyn dng chung. Mt lung mun truy cp vo mt ti nguyn dng chung (nh bin d liu) th trc tin n phi yu cu c c monitor ring. Khi c c monitor th lung nh c c cha kho m ca vo min tranh chp s dng nhng ti nguyn .
ng b ho
C ch monitor thc hin hai nguyn tc ng b chnh: + Khng mt lung no khc c phn monitor khi c mt lung yu cu v ang chim gi. Nhng lung c yu cu monitor s phi ch cho n khi monitor c gii phng. + Khi c mt lung gii phng (ra khi) monitor, mt lung ang ch monitor c th truy cp vo ti nguyn dng chung tng ng vi monitor . Mi i tng trong Java u c monitor, mi i tng c th c s dng nh mt kho loi tr nhau, cung cp kh nng ng b truy cp vo nhng ti nguyn chia s. Trong lp trnh c hai cch thc hin ng b: + Cc hm c ng b + Cc khi c ng b
ng b ho
Cc hm ng b
Hm ca mt lp ch cho php mt lung c thc hin mt thi im th n phi khai bo synchronized, c gi l hm ng b. Mt lung mun thc hin hm ng b th n phi ch c c monitor ca i tng c hm . Trong khi mt lung ang thc hin hm ng b th tt c cc lung khc mun thc hin hm ny ca cng mt i tng, u phi ch cho n khi lung thc hin xong v c gii phng. Bng cch , nhng hm c ng b s khng bao gi b tc nghn.
ng b ho
Cc hm ng b
Nhng hm khng c ng b ca i tng c th c gi thc hin mi lc bi bt k i tng no. Khi chy, chng trnh s thi hnh tun t cc lnh cho n khi kt thc chng trnh. Trong Java, hm ng b c th khai bo static. Cc lp cng c th c cc monitor tng t nh i vi cc i tng. Mt lung yu cu monitor ca lp trc khi n c th thc hin vi mt hm c ng b tnh (static) no trong lp, ng thi cc lung khc mun thc hin nhng hm nh th ca cng mt lp th b chn li.
ng b ha
V d: H thng ngn hng c 10 ti khon, trong c cc giao dch chuyn tin gia cc ti khon vi nhau mt cch ngu nhin. Chng trnh to ra 10 lung cho 10 ti khon. Mi giao dch c mt lung phc v s chuyn mt lng tin ngu nhin t mt ti khon sang ti khon khc. Nu chng trnh thc hin vi 10 lung hot ng khng ng b chuyn tin gia cc ti khon trong ngn hng. Vn s ny sinh khi c hai lung ng thi mun chuyn tin vo cng mt ti khon. Gi s hai lung cng thc hin: accounts[to] += amount; Cu lnh ny c thc hin nh sau: 1. Np accounts[to] vo thanh ghi. 2. Cng s tin trong ti khon accounts vi amount 3. Lu li kt qu cho accounts[to].
ng b ha
Chng ta c th gi thit lung th nht thc hin bc 1 v 2 vi amount = 500, sau n b ngt. Lung th hai c th thc hin trn vn c ba bc trn vi amount = 1000, sau lung th nht kt thc vic cp nht bng cch thc hin nt bc 3. Qu trnh ny c m t nh hnh sau : Lung 1 Lung 2 accounts[to] Thanh ghi 1 Thanh ghi 2 5000 5000 Np 5000 5500 Cng Np 5000 5000 Cng 5000
6000 6000 6000 5500
Lu li
5500
Lu li
Kt thc lung th nht, accounts[to]c 6000, nhng ngay sau lung th hai kt thc th cng chnh ti khon cha chuyn tin 263 i u c, nhng li ch cn 5500. ng ra n phi l 6500
ng b ha
Java s dng c ch ng b kh hiu qu l monitor. Mt hm s khng b ngt nu bn khai bo n l synchronized.
public synchronized void transfer(int from, int to, int amount){ if(accounts[from] < amount) return; accounts[from] -= amount; accounts[to] += amount; numTransacts++; if(numTransacts % NTEST == 0) test(); } public synchronized void test(){ int sum = 0; for(int i = 0; i < accounts.length; i++) sum += accounts[i]; System.out.println("Giao dich: " + numTransacts + " tong so: " + sum); }
ng b ha
Khi c mt lung gi hm c ng b th n c m bo rng hm ny phi thc hin xong th lung khc mi c s dng i vi cng mt i tng. Hot ng ca cc lung khng ng b v ng b ca hai lung thc hin gi hm transfer() Khng c ng b Thread 1 Thread 2 c ng b Thread 1 Thread 2
Cc kho i tng
Khi mt lung gi mt hm c ng b th i tng ca n b kho, ging nh kho ca phng. Nh vy, khi mt lung khc mun gi hm c ng b ca cng i tng th s khng m c. Sau khi thc hin xong, lung bn trong gii phng hm c ng b va s dng, ra khi i tng v a cha kho ra ngoi bc ca nhng lung khc c th tip tc cng vic ca mnh.
Cc kho i tng
Mt lung c th gi nhiu kho i tng cng mt thi im, nh trong khi ang thc hin mt li gi hm ng b ca mt i tng, n li gi tip hm ng b ca i tng khc. Nhng, ti mi thi im, mi kho i tng ch c mt lung s hu. Chng ta hy phn tch chi tit hn hot ng ca h thng ngn hng. Mt giao dch chuyn tin s khng thc hin c nu khng cn tin. N phi ch cho n cc ti khon khc chuyn tin n v khi c th mi thc hin c giao dch . public synchronized void transfer(int from, int to, int amount){ while(accounts[from] < amount) wait(); // Chuyn tin }
Cc kho i tng
Chng ta s lm g khi trong ti khon khng c tin? Tt nhin l phi ch cho n khi c tin trong ti khon. Nhng transfer() l hm c ng b. Do , khi mt lung chim c kho i tng th lung khc s khng c c hi s hu tr n, cho n khi lung trc gii phng kho . Khi wait() c gi trong hm c ng b (nh transfer()), lung hin thi s b chn li v trao li kho i tng cho lung khc. C s khc nhau thc s gia lung ang ch s dng hm ng b vi hm b chn li bi hm wait().
Khi mt lung gi wait() th n c a vo danh sch hng i. Cho n khi cc lung cha c a ra khi danh sch hng i th b lp lch s b qua v do vy chng khng th tip tc c. a mt lung ra khi danh sch hng i th phi c mt lung khc gi notify() hoc notifyAll() trn cng mt i tng.
notify() a mt lung bt k ra khi danh sch hng i. notifyAll() a tt c cc lung ra khi danh sch hng i.
Cc kho i tng
Nhng lung a ra khi danh sch hng i s c b lp lch kch hot chng. Ngay tc khc lung no chim c kho i tng th s bt u thc hin. Nh vy, trong hm transfer() chng ta gi notifyAll() khi kt thc vic chuyn tin mt trong cc lung c th c tip tc thc hin v trnh b tc. Cui cng chng trnh s dng c ch ng b c vit li nh sau.
public class SynBankTransfer{ public static void main(String arg[]){ Bank b = new Bank(NACCOUNTS, INI_BALANCE); for(int i = 0; i < NACCOUNTS; i++){ TransferThread t = new TransferThread(b, i, INI_BALANCE); t.setPriority(Thread.NORM_PRIORITY + i % 2); t.start(); } }
public static final int NACCOUNTS = 10; public static final int INI_BALANCE = 10000; }
Cc kho i tng
class Bank{ public static final int NTEST = 1000; private int[] accounts; private long numTransacts = 0; public Bank(int n, int initBalance){ accounts = new int[n]; for(int i = 0; i < accounts.length; i++) accounts[i] = initBalance; numTransacts = 0; } public void transfer(int from, int to, int amount){ while(accounts[from] < amount) wait(); accounts[from] -= amount; accounts[to] += amount; numTransacts++; notifyAll(); if(numTransacts % NTEST == 0) test(); }
Cc kho i tng
public synchronized void test(){ int sum = 0; for(int i = 0; i < accounts.length; i++) sum += accounts[i]; System.out.println("Giao dich: " + numTransacts + " tong so: " + sum); } public int size(){ return accounts.length; } } class TransferThread extends Thread{ private Bank bank; private int fromAcc; private int maxAmount; public TransferThread(Bank b, int from, int max){ bank = b; fromAcc = from; maxAmount = max; }
Cc kho i tng
public void run(){ try{ while(!interrupted()){ int toAcc = (int)(bank.size() * Math.random()); int amount = (int)(maxAmount * Math.random()); bank.transfer(fromAcc, toAcc, amount); sleep(1); } }catch(InterruptedException e){ } } }
Nu bn chy chng trnh vi cc hm transfer(), test() c ng b th mi vic s thc hin chnh xc ng theo yu cu. Tuy nhin, bn cng c th nhn thy chng trnh s chy chm hn cht t bi v phi tr gi cho c ch ng b nhm m bo cho h thng hot ng chnh xc, m bo nht qun d liu, hoc trnh gy ra tc nghn.
Deadlock
Mt deadlock xy ra khi hai tuyn c mt ph thuc vng quanh trn mt cp i tng ng b
Vn cht tc
C ch ng b trong Java l rt tin li, kh mnh, nhng khng gii quyt c mi vn ny sinh trong qu trnh x l a lung. V d : Account 1 c 2000$, Account 2 c 3000$ v Thread 1 cn chuyn 3000$ t Account 1 sang Account 2, ngc li Thread 2 cn chuyn 3500$ t Account 2 sang Account 1. Khi , Thread 1 v Thread 2 ri vo tnh trng cht tc,hoc tc nghn v chng chn ln nhau. Mt h thng m tt c cc lung (tin trnh) b chn li ch ln nhau v khng mt lung (tin trnh) no thc hin tip th c gi l h thng b cht tc (tc nghn). Trong tnh hung trn, c hai lung u phi gi wait() x l hai ti khon u khng s tin chuyn.
Vn cht tc
Trong chng trnh SynBankTransfer.java, hin tng tc nghn khng xut hin bi mt l do n gin. Mi giao dch chuyn tin nhiu nht l 10000$. C 10 ti khon vi tng s tin l 100000$. Do , mi thi im u c t nht mt ti khon c khng t hn 10000$, ngha l lung ph trch ti khon c php thc hin. Tuy nhin, khi lp trnh ta c th gy ra tnh hung khc c th lm xut hin tc nghn
Vn cht tc
V d : Trong SynBankTransfer.java thay v gi notifyAll() ta gi notify(). Nh trn phn tch, notifyAll() thng bo cho tt c cc lung ang ch c tin chuyn i c th tip tc thc hin, cn notify() ch bo cho mt lung c tip tc. Khi , nu lung c thng bo li khng th thc hin, v khng tin chuyn chng hn, th tt c cc lung khc cng s b chn li.
Vn cht tc
Chng ta hy xt kch bn sau:
+ Account 1: 19000$ + Tt c cc Account cn li u c 9000$ + Thread 1: chuyn 9500$ t Account 1 sang Account 2 + Tt lung khc u chuyn sang ti khon khc mt lng tin l 9100$. Ch c Thread 1 tin chuyn cn cc lung khc b chn li. Thread 1 thc hin chuyn tin xong ta c: + Account 1: 9500$ + Account 2: 18500$ + Tt c cc Account cn li u c 9000$ Gi s Thread 1 gi notify(). Hm ny ch thng bo cho mt lung ngu nhin n c th tip tc thc hin. Gi s l Thread 3. Nhng lung ny cng khng chuyn c v khng tin ti khon Account 3, nn phi ch (gi wait()). Thread 1 vn tip tc thc hin. Mt giao dch mi ngu nhin li c to ra. V d Thread 1: chuyn 9600$ t Account 1 sang Account 2. By gi Thread li gi wait(), v nh vy tt c cc lung u ri vo tnh trng tc nghn. Qua v d trn cho thy, mt ngn ng lp trnh c c ch h tr ng b l cha gii quyt vn tc nghn. Quan trng l khi thit k chng trnh, ta phi m bo rng mi thi im c t nht mt lung (tin trnh) tip tc thc hin.
Chng VIII
Cc lung I/O
Cc lung
Cc lung l nhng ng ng gi v nhn thng tin trong cc chng trnh java. Khi mt lung c hoc ghi, cc lung khc b kho. Nu li xy ra trong khi c hoc ghi lung, mt bit l s c to ra. Lp java.lang.System nh ngha lung nhp v xut chun.
Cc lp lung I/O
Lp System.out. Lp System.in. Lp System.err.
Cc lp lung I/O
x l mi loi d liu, java chia lung thnh 2 loi : lung byte ( byte stream) v lung k t (character stream) Lp InputStream v OutputStream l hai lp c s cho mi lung nhp xut hng byte Lp Reader/ Writer hai lp c s cho vic c ghi hng k t
Lp Reader
Lp Reader v InputStream c mt giao din ging nhau, chng ch khc nhau v kiu d liu u vo Lp Reader c cc phng thc c mt k t hoc mng cc k t Cc phng thc:
int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length)
Lp Writer
Lp Writer v OutputStream c mt giao din ging nhau, chng ch khc nhau v kiu d liu u vo Lp Writer nh ngha cc phng thc ghi mt k t hoc mng cc k t ra lung Cc phng thc:
int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length)
Lp Writer
H tr cc phng thc sau :
flush( ) close( )
getBuffer( ) toString( )
Lp hng byte
c th c ghi 1 byte, ta s dng lung hng byte Hai lp InputStream v OutputStream l hai lp c s tru tng cho cc lung hng byte Mi ln c/ghi ra lung th c 8 bits ra lung
Lp InputStream
L lp tru tng nh ngha cch nhn d liu Cung cp s phng thc dng c v cc lung d liu lm u vo. Trong lp InputStream c cc phng thc cho vic c mt byte hoc mng cc byte Cc phng thc:
int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length)
Lp OutputStream
L lp tru tng. nh ngha cch ghi d liu vo lung. Cung cp tp cc phng thc tr gip trong vic to, ghi v x l cc lung xut. Lp OutputStream c cc phng thc ghi mt byte hoc mng cc byte ra lung Cc phng thc:
Khng h tr cc phng thc mi Cc phng thc np chng ca lp InputStream, ging nh read(), skip(), available() v reset().
Cc lp nhp/xut tp tin
Cc lp ny tr gip trong Java h tr cc thao tc nhp v xut:
Cc lp File, FileDescriptor, v RandomAccessFile c s dng h tr trc tip hoc truy cp nhp/xut ngu nhin.
Lp tp tin
c s dng truy cp cc i tng tp tin v th mc Nhng tp tin c tn c t tn theo qui c ca h iu hnh. Lp ny cung cp phng thc khi to to ra cc th mc v tp tin Tt c cc thao tc th mc v tp tin u c s dng cc phng thc truy cp v cc phng thc th mc m cc lp tp tin cung cp
Lp tp tin
x l tp tin ngoi tr, ta s dng cc lung lin quan n tp tin nh : FileInputStream, FileOutputStream, FileReader, FileWriter FileInputStream v FileOutputStream phc v cho vic c ghi tp tin hng Byte FileReader v FileWriter phc v cho vic c ghi tp tin hng k t
Nhp / xut lc
Lc: v c bn c s dng thch ng cc lung theo cc nhu cu ca chng trnh c th. B lc nm gia lung nhp v lung xut. Thc hin mt s tin trnh c bit trn cc byte c chuyn giao t u vo n kt xut. C th phi hp thc hin mt dy cc tu chn lc.
Lp FilterInputStream
L lp tru tng. L cha ca tt c cc lp lung nhp lc. Cung cp kh nng to ra mt lung t lung khc. Mt lung c th c v cung cp di dng kt xut cho lung khc. Duy tr mt dy cc i tng ca lp InputStream Cho php to ra nhiu b lc kt xch
Lp FilterOutputStream
L dng b tr cho lp FilterInputStream. L cha ca tt c cc lp lung kt xut. Duy tr i tng ca lp OutputStream nh l mt bin out. D liu ghi ra lp ny c th sa i thc hin cc thao tc lc, v sau phn hi n i tng OutputStream.
Vng m nhp/xut
V cc thao tc vi cng, mng thng lu hn so vi thao tc b nh trong K thut s dng vng m nhm tng tc c/ghi Vi k thut vng m s gim c s ln c/ghi lung Trong Java ta c th to ra vng m ca cc lp : BufferInputStream BufferOutputStream BufferReader BufferWriter
Vng m nhp/xut
Vng m: L kho lu tr d liu. C th cung cp d liu thay v quay tr li ngun d liu gc ban u. Java s dng vng m nhp v kt xut tm thi lp cache d liu c c hoc ghi vo mt lung. Trong khi thc hin vng m nhp: S lng byte ln c c cng thi im v lu tr trong mt vng m nhp. Khi chng trnh c lung nhp, cc byte nhp c c vo vng m nhp.
Vng m nhp/xut
Cc phng thc to dng lung m : public BufferInputStream( InputStream ) public BufferInputStream (InputStream in, int bufferSize) public BufferOutputStream ( OutputStream out) public BufferOutputStream ( OutputStream out, int bufferSize) public BufferReader ( Reader in) public BufferReader ( Reader in, int bufferSize) public BufferWriter ( Writer out) public BufferWriter ( Writer out, int bufferSize)
Lp BufferedInputStream
T ng to ra v duy tr vng m h tr vng m nhp. Lp BufferedInputStream l mt b m, n c th p dng cho mt s cc i tng nht nh ca lp InputStream. Cng c th phi hp cc tp tin u vo khc. S dng vi bin trin khai vng m nhp.
Lp BufferedInputStream (tt)
nh ngha hai phng thc thit lp: - Mt cho php ch nh kch thc ca vng m nhp.
C hai phng thc thit lp u tip nhn mt i tng ca lp InputStream nh mt tham s. Np chng cc phng thc truy cp m InputStream cung cp, v khng a vo bt k phng thc mi no.
Lp BufferedOutputStream
Thc hin vng m kt xut theo cch tng ng vi lp BufferedInputStream. nh ngha hai phng thc thit lp. N cho php chng ta n nh kch thc ca vng m xut trong mt phng thc thit lp, cng ging nh cung cp kch thc vng m mc nh. Np chng tt c phng thc ca lp OutputStream v khng a vo bt k phng thc no.
Lp PrinterWriter
Thc hin mt kt xut. Lp ny c phng thc b sung , tr gip in cc kiu d liu c bn . Lp PrintWriter thay th lp PrintStream Thc t ci thin lp PrintStream; lp ny dng mt du tch dng ph thuc nn tng im cc dng thay v k t \n. Cung cp phn h tr cho cc k t unicode so vi PrintStream. Cc phng thc:
checkError( ) setError( )
Lp RandomAccessFile
Cung cp kh nng thc hin I/O theo cc v tr c th bn trong mt tp tin. d liu c th c hoc ghi ngu nhin nhng v tr bn trong tp tin thay vi mt kho lu tr thng tin lin tc. phng thc seek( ) h tr truy cp ngu nhin. Thc hin c c v ghi d liu. H tr cc cp php c v ghi tp tin c bn. K tha cc phng thc t cc lp DataInput v DataOutput
Gi java.awt.print
Gm c cc interface
Pageable:
nh ngha cc phng thc dng cc i tng biu th cc trang s c in. Ch nh s trang c in, v trang hin ti hay l tranh gii trang c in Chi nh phng thc print( ) s dng in mt trang trn i tng Graphics Cung cp kh nng truy cp i tng PrinterJob
Printable:
PrinterGraphics:
Chng IX
KT NI CSDL Java Database Connectivity
Tng quan
JDBC cung cp tp cc lp v interface cho php chng trnh Java c th lm vic c vi h CSDL Tp cc lp ca JDBC c th lm vic c vi mi h csdl.
Database Driver
Bo m ng dng java tng tc vi mi csdl di mt cch thc chun v duy nht. Bo m nhng yu cu t chng trnh s c biu din trong csdl di mt ngn ng m csdl hiu c Nhn cc yu cu t client, chuyn n vo nh dng m csdl c th hiu c v th hin trong csdl. Nhn cc phn hi, chuyn n ngc li nh dng d liu java v th hin trong ng dng.
JDBC Driver
C 4 loi JDBC Driver Loi 1 : JDBC s dng cu ni ODBC Loi 2 : JDBC kt ni trc tip vi cc trnh iu khin Loi 3 : JDBC kt ni thng qua cc ng dng mng trung gian Loi 4 : JDBC kt ni thng qua cc trnh iu khin c th xa Loi 2,3,4 ni chung c vit bi nh cung cp csdl, hiu qu hn loi 1 nhng thc hin phc tp hn.
Disk Disk
Network Interface
Database Database
Server
Client
Disk Disk
Network Interface
Network Interface
Database Database
Server
JDBC kt ni thng qua cc ng dng mng trung gian 100% java C kh nng giao tip trc tip vi h CSDL khng cn chuyn i
Aplication Aplication JDBC JDBCDriver Driver
Network Interface Client
Disk Disk
Network Interface
Database Database
Server
Disk Disk
Network Interface
Server
Database Database
Gi Java.sql
Cung cp tp hp cc lp v interface lm vic vi CSDL.
Cc lp
DriverManager Date, Time Timestamp Types
Cc Interfaces
Gi Java.sql
Gi Java.sql
Cc bc kt ni CSDL
Np trnh iu khin To thng tin kt ni v i tng Connection To i tng Statement thc thi cc lnh sql..
Np Driver
Lp DriverManager chu trch nhim np driver v to kt ni n csdl. np v ng k trnh iu khin, ta gi lnh : Class.forName(String) V d :
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
Hoc: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Tng ng new sun.jdbc.odbc.JdbcOdbcDriver(); Ch :Vi cc trnh iu khin khc nhau th String ca phng thc Class.forName(String) s khc nhau
To thng tin kt ni
Tip tc to i tng Connection bng cch gi phng thc getConnection ca lp DriverManager yu cu trnh iu khin np bi Class.forName() trc tip nhn thng tin v thc thi kt ni nh sau :
conn = DriverManager.getConnection(url, username, password );
Trong : + url : chui nu ln c im csdl c dng jdbc:subprotocol:subname - subprotocol :giao thc con tng ng vi csdl - subname : tn csdl + username : tn ng nhp csdl + password : mt khu ng nhp csdl
To thng tin kt ni
V d : Np trnh iu khin ca MySQL :
Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://ServrName/DBName?user=UserName&password=Pass");
i tng Statement
Tt c cc lnh tc ng n c s d liu u c th thc hin thng qua mt trong 3 i tng :
i tng Statement
i tng Connection cha lin kt trc tip n csdl. S dng i tng Connection to i tng Statement.
Statement state = con.createStatement();
i tng ny c nhim v gi cc cu lnh sql n csdl. executeQuery(String) or executeUpdate(String) method Cng mt i tng Statement c th s dng cho nhiu cu lnh sql khc nhau.
The executeQuery()
Nhn cu lnh SQL (select) lm i s, tr li i tng ResultSet
ResultSet
Cha mt hoc nhiu hng d liu t vic thc hin cu lnh truy vn. C th ly d liu tng hng d liu mt trong ResultSet. S dng phng thc next() di chuyn n hng d liu tip theo trong ResultSet. Hm next() tr li true ch rng hng cha d liu, tr li false hng cui cng, khng cha d liu. Thc hin while (rs.next()){ // examine a row from the results }
ResultSet
V d :
String isbn = rs.getString(1); // Column 1 float price = rs.getDouble(Price);
ResultSetMetadata
i tng ny cho bit thng tin v ResultSet
ResultSet rs = stmt.executeQuery(SQLString); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); getColumnName(int column)
Database Metadata
i tng ny cho bit thng tin v csdl.
import java.sql.*; import javax.sql.*; public class Connect { public static void main(String args[]) throws ClassNotFoundException,SQLException { System.out.println("Ket noi CSDL"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="jdbc:odbc:myDatabase"; Connection conn=DriverManager.getConnection(url,"login","password"); Statement stmt=conn.createStatement(); String sql0="INSERT INTO KhachHang(Id,TenKH,DiaChi,Luong) VALUES('8',Nguyen C',HCM','900')"; stmt.executeUpdate(sql0); //Cap nhat du lieu String sql2="UPDATE Khachhang SET Luong=Luong+luong*0.2"; int n=stmt.executeUpdate(sql2); if (n < 1) System.out.println("Khong co ban ghi nao duong cap nhat"); else System.out.println("Co "+ n +" ban ghi duong cap nhat");
Chng trnh mu
Chng trnh mu
String sql="SELECT Id,TenKH,DiaChi,Luong FROM KhachHang"; ResultSet rs=stmt.executeQuery(sql); while (rs.next()) { int id=rs.getInt("Id"); double l=rs.getDouble("Luong"); String s=rs.getString("TenKH"); String d=rs.getString("DiaChi"); System.out.println("ID=" +id +" " + s+ " " + d + " Luong=" + l) ; } } catch(SQLException e) {System.out.println("Loi thao tac CSDL");} } }
import java.sql.*; class JDBCDemo1 { public static void main(String[] args) { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con=DriverManager.getConnection("jdbc:odbc:Accserver"); Statement stmt = con.createStatement(); String sql=Select * from Table1; ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); for(int j=1; j<=numberOfColumns;j++) { System.out.println(rsmd.getColumnLabel(j)); } while(rs.next()) { for(int i=1; i<=numberOfColumns;i++){ System.out.println(rs.getObject(i)); }} rs.close(); stmt.close(); } catch(Exception e){ System.out.println("Error " + e); } } }
Chng trnh mu
Ht !!!