Microsoft Visual J++

Download Report

Transcript Microsoft Visual J++

การอบรมหลักสูตรการพัฒนา Web Application ด้วย Java
Introduction to Java
•
•
•
•
•
Javaคืออะไร?
Java Platform
Java Language
Java Virtual Machine และ Java Compiler
Java SDK (Software Development Kit)
• เครื่ องมือในการพัฒนาโปรแกรม Microsoft Visual J++
• Hello World
Java คืออะไร?
• Java คือ Programming Language
• Java ได้ถูกพัฒนาโดยบริ ษทั Sun Microsystems
• Java คือภาษาที่ถูกพัฒนาให้สามารถใช้งานได้บนระบบ Computer
ทุกๆ Platform
Java Platform
• สามารถใช้งานได้ ไม่วา่ เครื่ องคอมพิวเตอร์จะอยูใ่ นระบบปฏิบตั ิการ
ใด เนื่องจากโปรแกรมภาษาจาวาไม่ได้รันบนระบบปฏิบตั ิการ แต่
รันบนแฟลตฟอร์มเสมือน ซึ่งเรี ยกว่า จาวา แพลตฟอร์ม (Java
Platform) หรื อ จาวาเวอร์ชวั น์แมทชีน (Java Virtual Machine)
Java Program
Java Program
Java Program
Java Virtual Machine
Windows OS
UNIX OS
Linux OS
Java Language
• Java Programming Language
– สนับสนุนการเขียนโปรแกรมเชิงวัตถุ (Object- Oriented Programming)
– ใช้ได้กบั คอมพิวเตอร์ ทุกระบบ (Multi Platform)
– สร้างโปรแกรมเพื่อใช้งานผ่าน Network (Internet / Intranet / Extranet)
ได้
– การรองรับมาตรฐานความปลอดภัยในการใช้งานรู ปแบบต่างๆ
Java Language
• Write Once, Run Anywhere. (Cross- Platform)
Java Source code (.java file)
Compile (javac)
Java Byte code (.class file)
Windows OS
UNIX OS
Linux OS
Java Virtual Machine และ Java Compiler
• จาวาเวอร์ ชัวน์ แมทชีน (Java Virtual Machine) คือ Engine ใน
ระบบคอมพิวเตอร์ ที่เข้าใจโปรแกรมของภาษาจาวา ทาหน้าที่
จัดการ และตีความแต่ละคาสัง่ ในโปรแกรมจาวา ที่ถูกเรี ยกว่าไบต์
โค้ด (Bytecodes) แปลงให้เป็ นคาสัง่ เพื่อประมวลผลของแต่ละ
ระบบปฏิบตั ิการที่ใช้งาน สาหรับการรันโปรแกรมที่เขียนด้วยภาษา
จาวาJVM ของบริ ษทั ซัน มีชื่อว่า JRE (Java Runtime Environment)
• จาวาคอมไพล์เลอร์ (Java Compiler) สาหรับการคอมไพล์
โปรแกรมภาษาจาวาคอมไพล์ซอร์สโค้ดที่สร้างจากภาษาจาวาให้
เป็ นไบต์โค้ด Java Compiler ของบริ ษทั ซัน มีชื่อว่า SDK (Software
Development Kit)
Java 2 SDK (Software Development Kit)
• Download ได้ที่ http://java.sun.com
• เป็ นชุดพัฒนาโปรแกรมด้วยภาษาจาวา ซึ่งมีเครื่ องมือช่วยสาหรับ
นักพัฒนาโปรแกรม เช่น คอมไพลเลอร์ ดีบกั เกอร์ รันไทม์ (JRE)
ไลบรารี่ และโปรแกรมสนับสนุ น
อื่นๆอีกมากมาย Sun Microsystems ได้แบ่งรู ปแบบการทางานของ
โปรแกรมที่สร้างจากภาษาจาวาออกเป็ น 3 ส่ วน คือ
Java 2 SDK (Software Development Kit)
• J2ME (Java 2 Micro Edition) เหมาะสมสาหรับการใช้งาน
บนอุปกรณ์อิเล็กทรอนิกส์ขนาดเล็ก เช่น โทรศัพท์มือถือ PDA
เครื่ องใช้ไฟฟ้ า หรื ออุปกรณ์ไร้สาย เป็ นต้น
• J2SE (Java 2 Standard Edition) ทางานบนคอมพิวเตอร์
ทัว่ ไปในลักษณะ Standalone เช่น Java Application , Java Applet
หรื อ JavaBean
• J2EE (Java 2 Enterprise Edition) ทางานบนคอมพิวเตอร์
ระดับเซิร์ฟเวอร์ เพื่อรองรับการใช้งานจากผูใ้ ช้จานวนมากๆ เช่น
Java Servlet , JSP (Java Server Page)
เครื่ องมือในการพัฒนาโปรแกรม
การสร้าง Source Code สามารถสร้างโดย
• โปรแกรม Text Editor เช่น Notepad ,EditPlus …
• โปรแกรม Visual Tools เช่น Microsoft Visual J++ ,Borland
JBuilder, WebGain Visual Café, Oracle JDeveloper...
• JBuiderX ~ Can debug, Support Any Plug-in
Hello World
HelloWorld.java
public class HelloWorld {
public static void main ( String [] args ) {
System.out.println ( “Hello World” ) ;
}
}
Java Programming Part I
Java Programming Part I
•
•
•
•
•
•
กฎการตั้งชื่อ (Identify)
การประกาศตัวแปร (Data Member or Declaring Attribute)
การประกาศเมธรอด (Method member or Declaring Methods)
ข้ อมูลค่ าคงตัว (Literals)
ชนิดข้ อมูล (Data Type)
ตัวแปร (Variables)
Java Programming Part I
• กฎการตั้งชื่อ (Identify)
– ใช้ต้ งั ชื่อ Class, Method หรื อ Variable
– ประกอบด้วยตัวอักษร และหรื อตัวเลข โดยตัวอักษรควรใช้อกั ษร
ภาษาอังกฤษ รวมถึงสัญลักษณ์พิเศษ _ (underscore) , หรื อ $ (dollar sign)
– ตัวอักษรตัวเล็กและตัวใหญ่มีความแตกต่างกัน (case-sensitive)
– ห้ามใช้ตวั เลขเป็ นตัวแรกของชื่อ เช่น 1Hello
– ความยาวไม่ควรเกิน 65,535 ตัวอักษร
– ต้องไม่ตรงกับคียเ์ วิร์ดใดในภาษาจาวาต่อไปนี้
Java Keywords
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Java Programming Part I
การตั้งชื่อตามรู ปแบบ (Java Programming Language Coding
Conventions)
• Class : กาหนดให้พยัญชนะตัวแรกเป็ นตัวอักษรพิมพ์ใหญ่ ตัวอักษรที่
เหลือในคาเดียวกันเป็ นตัวพิมพ์เล็ก เช่น HelloWorld,VerifyLogin
• Variable : ตัวอักษรทุกตัวเป็ นตัวพิมพ์เล็กทั้งหมด เช่น name , rowcount
• Constant : ตัวอักษรทุกตัวเป็ นตัวพิมพ์ใหญ่ท้ งั หมด เช่น CORPERATE,
FONTSIZE
• Method : กาหนดให้พยัญชนะตัวแรกเป็ นตัวอักษรพิมพ์เล็ก คาถัดไปให้
เป็ นตัวอักษรตัวพิมพ์ใหญ่ เช่น setFontColor ,openDataFile
Java Programming Part I
การตั้งชื่อตามรู ปแบบ (Java Programming Language Coding
Conventions)
• Packages : ตัวอักษรทุกตัวเป็ นตัวพิมพ์เล็กทั้งหมด เช่น
banking.domain, com.sun.
• Interface : ใช้การตั้งชื่อ เช่นเดียวกับ Class
Java Programming Part I
การประกาศตัวแปร (Data Member or Declaring Attribute)
รู ปแบบ
<modifiers> <type> <name>
modifiers = ระดับการเข้าถึง [public, private, protected, <default> ไม่ระบุ
หมายถึง package]
ตัวอย่าง
public class Sample {
private int a;
private float b= 10000.0F;
private String name = ‘Alice’;
}
Java Programming Part I
การประกาศเมธรอด (Method member or Declaring Methods)
รู ปแบบ <modifiers> <return_type> <name> ([<argument_list>]) {
[<statements>]
}
ตัวอย่าง public class Fish {
private int weight;
public int getWeight(){return weight;}
public void setWeight(int newWeight){weight = newWeight; }
}
Java Programming Part I
• ข้ อมูลค่ าคงตัว (Literals) แบ่ งออกเป็ น
1. ค่ าคงตัวจานวนเต็ม
• แบบปกติ (– 24783648 ถึง +247483647) เช่น 10 , -2 , 123
• แบบยาว (-9223372036854775808 ถึง 9223372036854775807)
เช่น 100L, 12456L
2. ค่ าคงตัวทศนิยม
• แบบปกติ (– 1 .4 x10 45 ถึง +3.4 x10 38) เช่น 10.2F , 2155.45f
• แบบยาว (-4.9 x 1 0-324 ถึง 1 .7 x 1 0 308) เช่น 100.5D, 5.0,
258455.45d
Java Programming Part I
• ข้ อมูลค่ าคงตัว (Literals) แบ่ งออกเป็ น
3. ค่ าคงตัวตรรก (true,false)
4. ค่ าคงตัวตัวอักษร
• ตัวอักษร ตัวเลข เครื่องหมาย สั ญลักษณ์ ต่ าง ๆ เช่ น ‘a’, ‘C’, ‘$’
5. ค่ าคงตัวข้ อความ
• มีความยาวมากกว่ า 1 ตัวอักษร เช่ น ‘This is a message’
Java Programming Part I
• การใช้ งานข้ อมูลค่ าคงตัว
– ทาการกาหนดค่ าเริ่มต้ นของตัวแปร
int x = 1;
float f = 3.14F;
char c = ‘Z’;
– ใช้ สร้ าง Expression
b = = true;
y += 10;
Java Programming Part I
• ชนิดข้ อมูล (Data Type)
– ชนิดข้ อมูลพืน้ ฐาน (Primitive Types) เป็ นการสร้ างพืน้ ที่ใน
หน่ วยความจา เพือ่ ใช้ เก็บข้ อมูลโดยตรงลงในพืน้ ทีน่ ้ัน ๆ โดย
ขนาดพืน้ ทีท่ ใี่ ช้ เก็บ ขึน้ อยู่กบั การกาหนดประเภทข้ อมูล เช่ น
ตัวอักษร ตัวเลขจานวนเต็ม
– ชนิดข้อมูลอ้างอิง (Reference Types) เป็ นการสร้างพื้นที่ใน
หน่วยความจาสาหรับเก็บข้อมูล พร้อมพื้นที่สาหรับอ้างถึงเพื่อ
อ้างไปยังพื้นที่สาหรับเก็บข้อมูล
Java Programming Part I
• ชนิดข้อมูลพื้นฐาน (Primitive Types)
–
–
–
–
Logical - boolean
Textual - char
Integral - byte, short, int, long
Floating - double , float
Java Programming Part I
• ตัวแปรอ้างอิง (Reference Types)
เกิดขึ้นได้จากการกาหนด 2 ลักษณะ
– สร้างมาจากการกาหนด Instance
– การกาหนดข้อมูลในลักษณะของแถวลาดับหรื ออะเรย์ (Array)
Java Programming Part I
• ตัวแปร (Variables)
คือการนาเอาชนิดข้อมูลมาอ้างถึงด้วยชื่อ ซึ่งแยกประเภทตาม
ตาแหน่งที่สร้างตัวแปร
class Class1{
private int x; // Class Variable
public static void main (String[] args){
private String s; //Method Variable
}
}
Java Programming Part II
Java Programming Part II
• คาสั่ ง (Statements)
• คาอธิบาย (Comments)
• ตัวดาเนินการ (Operators)
: ตัวดาเนินการทางคณิตศาสตร์ (Arithmetic Operators)
: ตัวดาเนินการที่เกีย่ วข้ องกับบิต(Bitwise Operators)
: ตัวดาเนินการข้ อความตรรกะ (Boolean Operators)
: ตัวดาเนินการเกีย่ วกับสตริง (String Operators)
Java Programming Part II
• นิพจน์ (Expressions)
• คาสั่ งควบคุมการทางานของ Statement (Control Flows)
: เงื่อนไข (Condition)
– if ... else
: ตรวจสอบค่ า (Multiple Branch)
– switch ... case
Java Programming Part II
: ลูป (Loop)
- for …
- do … while
- while ...
: กระโดด (Jumps)
break, continue, return
Java Programming Part II
• คาสั่ ง (Statement)
– ใช้ กาหนดตัวแปร ประมวลผลหรือสร้ าง Expression
– ปิ ดท้ ายด้ วย ;
ตัวอย่ าง
int i;
System.out.println(“Hello”);
float f; f = 1.25; Integer id = new Integer(123);
Java Programming Part II
• คอมเม็นต์ (Comments)
– คอมเม็นต์ ส่วนท้ ายบรรทัด สาหรับข้ อความยาวไม่เกินหนึ่งบรรทัด
// ข้ อความ
– คอมเม็นต์ ส่วนข้ อความ (สาหรับข้ อความยาวหลายบรรทัด)
/* ข้ อความ
*/
/** ข้ อความ */
Java Programming Part II
• ตัวดาเนินการ(Operator)
– ตัวดาเนินการทางคณิตศาสตร์ (Arithmetic Operators)
ประเภทการคานวณ (Arithmetic Operators)
ตัวดาเนินการ
ความหมาย
ตัวอย่ างการใช้ งาน
+
15
การบวก
10+5
5
การลบ
10-5
*
การคูณ
50
10*5
ผลลัพธ์
Java Programming Part II
ประเภทการคานวณและการให้ ค่า (Arithmetic Assignment Operators)
ตัวดาเนินการ
ความหมาย
ตัวอย่ าง
เปรียบได้ กบั
ผลลัพธ์
(เมื่อ a=10)
+=
การบวก
a +=5
a=a+5
-=
การลบ
a -=5
a=a-5
15
5
*=
การคูณ
/=
การหาร (ได้ ผลหาร)
a*=5
a/=5
a=a*5
a=a/5
50
Java Programming Part II
ประเภทการคานวณเพิม่ ค่ าและลดค่ าข้ อมูล (Increment/Decrement Arithmetic Operators)
ตัวดาเนินการ
(เมื่อ a=10)
ความหมาย
ตัวอย่ าง
ผลลัพธ์
ผลลัพธ์
หลังคาสั่ ง
++Variable
เพิม่ ค่ าหนึ่งค่ าก่ อนการเข้ าถึง System.out.println(++a)
11
11
Variable ++
เพิม่ ค่ าหนึ่งค่ าหลังการเข้ าถึง System.out.println(a++)
10
11
- - Variable
ลดค่ าหนึ่งค่ าก่ อนการเข้ าถึง
System.out.println(- -a)
9
9
Variable - -
ลดค่ าหนึ่งค่ าหลังการเข้ าถึง
System.out.println(a- -)
10
9
Java Programming Part II
– ตัวดาเนินการที่เกีย่ วข้ องกับบิต(Bitwise Operators)
ตัวดาเนินการ
ความหมาย
ตัวอย่ าง
ผลลัพธ์ ของ a
(เมือ่ a=1101; b=1001)
~
NOT ( 1 เป็ น 0; 0 เป็ น 1)
&
AND
a&b
1001
|
OR
a|b
1101
<<
ขยับบิตทางซ้ าย
a << 2
0100
>>
ขยับบิตทางขวา
a >> 2
0111
~a
0010
Java Programming Part II
– ตัวดาเนินการข้ อความตรรกะ (Boolean Operators)
ตัวดาเนินการเปรียบเทียบ
ตัวดาเนินการ ความหมาย
15 ;)
ตัวอย่ าง
ผลลัพธ์ (a = 10; b =
==
ค่ าเท่ ากันหรือไม่
a==b
False (เท็จ)
!=
ค่ าไม่ เท่ ากันหรือไม่
a != b
True (จริง)
>
ค่ ามากกว่ าหรือไม่
a>b
False (เท็จ)
>=
ค่ ามากกว่ าหรือเท่ ากันหรือไม่
a >= b
False (เท็จ)
<
ค่ าน้ อยกว่ าหรือไม่
a<b
True (จริง)
<=
ค่ าน้ อยกว่ าหรือเท่ ากันหรือไม่
a <= b
True (จริง)
Java Programming Part II
ตัวดาเนินการข้ อมูลตรรกะ
ตัวดาเนินการ
15 ;)
ความหมาย
ตัวอย่ าง
ผลลัพธ์ (a = 10; b =
True (จริง)
!
กลับค่ าทางตรรกะ
!(a = = b)
&&
AND ค่ าทางตรรกะ
(5>=a) && (5<=b)
False (เท็จ)
||
OR ค่ าทางตรรกะ
(15= = a) || (15= = b)
True (จริง)
Java Programming Part II
– ตัวดาเนินการสาหรับข้ อความ (String Operators)
* การเชื่อมข้ อความ : ใช้ เครื่องหมาย “+” ในการเชื่อมข้ อความ
* การดาเนินการกับข้ อความ : สามารถใช้ เมธรอดของคลาส String เช่ น
charAt
ดึงตัวอักษรในข้ อความ ณ ตาแหน่ งใด ๆ
length
หาความยาวของตัวอักษรในข้ อความ
subString
ตัดบางส่ วนของข้ อความมาใช้ งาน
toLowerCase
แปลงตัวอักษรในข้ อความให้ เป็ นตัวเล็ก
…..
…..
Java Programming Part II
• นิพจน์ (expressions)
คือการสร้ างคาสั่ งหรือส่ วนของคาสั่ งเพือ่ ให้ เกิดการประมวลผล
มีการสร้ างหลายรูปแบบคือ
– ประเภทการคานวณ
– ประเภทการเรียกใช้
Java Programming Part II
ประเภทการคานวณ
– หมายถึงการเขียน Statement ในซอร์ สโค้ ดเพือ่ ให้ เกิดการ
ประมวลผลที่ได้ ผลลัพธ์
– สร้ างได้ ท้งั จากข้ อมูลค่ าคงที่ ตัวแปร และตัวดาเนินการ
ตัวอย่ าง
5 * 800;
a = 12.5;
(a<b) && (c>d)
Java Programming Part II
ประเภทการเรียกใช้
– หมายถึงการเขียน Statement ในการเรียกใช้ เมธรอดของคลาส
หรือของ Object
ตัวอย่ าง
Integer.parseInt(“12”);
System.out.println(“Hello Java”);
Java Programming Part II
• คาสั่ งควบคุมการทางานของ Statement (Control Flows)
: เงือ่ นไข (Condition) if ไม่ มี else
รู ปแบบ if (expression)
statement;
public class CheckPositiveNumber {
public static void main(String arg[]){
if(Integer.parseInt(arg[0])>0)
System.out.println(“Your Number [“ +
Integer.parseInt(arg[0]) + “] is Positive”);
}
}
Java Programming Part II
: เงื่อนไข (Condition) if มี else
รู ปแบบ
if (expression)
statement1;
else
statement2;
public class YourAge{
public static void main(String arg[]){
if(Integer.parseInt(arg[0]) >30)
System.out.println(“You’re Older”);
else System.out.println(“Your’re Younger”);
}
}
Java Programming Part II
: ตรวจสอบค่ า (Multiple Branch)
รู ปแบบ
switch (Variable)
{ case Data_1 : statement_1; break;
case Data_2: statement_2; break;
…
case Data_n: statement_n; break;
default: statement
}
Java Programming Part II
public class ShowString{
public static void main(String arg[]){
int a = Integer.parseInt(arg[0]);
switch(a){
case 1 : System.out.println(“One”); break;
case 2 : System.out.println(“Two”); break;
default : System.out.println(“> Two”);
}
}
}
Java Programming Part II
: ลูป (Loop)
for …
รู ปแบบ
for( Initial_Counter; Condition; Increase_Counter/Decrease_counter)
Statement;
public class PrintWord{
public static void main(String art[]){
int a;
for( a=0; a<10; a++)
System.out.println(“Sawadee”);
}
}
Java Programming Part II
: ลูป (Loop)
while …
รู ปแบบ
while (condition)
Statement;
public class FormulaMultiple{
public static void main(String arg[]){
int a = 1; //Initial Counter
while (a <= 12){ //Counter Check
System.out.println(Integer.parseInt(arg[0]) * a);
a++; //Increase Counter
}
}
}
Java Programming Part II
: ลูป (Loop)
do ... while
รู ปแบบ
do
statement
while (Condition)
public class DoWhile{
public static void main(String arg[]){
do
System.out.println(“Don’t forget me”);
while ( 5>10);
}
}
Java Programming Part II
: กระโดด (Jumps) break
รู ปแบบ
break label_name
public class BreakScope{
public static void main(String args[]){
Comehere: for(int a=0; a<10; a++){
System.out.println("Line 1");
for(int b=0; b<10; b++){
System.out.println("Line 2");
break Comehere;
}
System.out.println("Line 3");
}
}
}
Java Programming Part II
: กระโดด (Jumps) continue
รูปแบบ
continue label_name
public class BreakScope2{
public static void main(String args[]){
Comehere: for(int a=0; a<10; a++){
System.out.println("Line 1");
for(int b=0; b<10; b++){
System.out.println("Line 2");
continue Comehere;
}
System.out.println("Line 3");
}
}
}
Java Programming Part II
: กระโดด (Jumps) return
รูปแบบ
return expression
- ใช้ สาหรับการหยุดการทางานของเมธรอด
- เมื่อเมธรอดเป็ นแบบคืนค่ าได้ คีย์เวิร์ด return
ตามด้ วยค่ าที่ต้องการส่ งกลับ
Java Programming Part III
Java Programming Part III
• Class versus Object
– Reference Variable
– Instance
• Reference Variable versus Instance
• Method
: Overload
: Mutation and Assessor
: Constructor
Class versus Object
• คลาส (Classes)
– คือ นิยามของวัตถุ หรื อรู ปแบบ Template ของวัตถุ (Object)
– คลาสหนึ่งคลาส คือ ไฟล์ Bytecode 1 ไฟล์
– คลาสสามารถใช้งานได้เมื่อนาไปสร้าง Instance ขึ้นมา
– หรื อใช้งานในบางส่ วน เมื่อส่ วนนั้นถูกกาหนดด้วยคียเ์ วิร์ด Static
Class versus Object
• สิ่ งทีใ่ ช้ บอกความเป็ นวัตถุมี 2 ลักษณะ
1. วัตถุมีอะไรเป็ นส่ วนประกอบ เช่น รถยนต์มี ล้อ และ เครื่ องยนต์
เราเรี ยกว่า คุณสมบัติของวัตถุ ใน Java แทนด้ วยตัวแปรคลาส
2. วัตถุสามารถทาอะไรได้ เช่น รถยนต์ตอ้ งสามารถวิง่ ได้ เราเรี ยกว่า
พฤติกรรมของวัตถุ ใน Java แทนด้ วยตัวแปรแมธรอส
ซึ่งทั้ง คุณสมบัติของวัตถุ และ พฤติกรรมของวัตถุ คือสิ่ งที่
ประกอบขึน้ เป็ นคลาส (Classes)
ตัวอย่าง
• Vehicle class
Vehicle
-numberOfWheels: int
-hasEngine: boolean
+run()
Class Diagram
public class Vehicle{
//Attributes
int numberOfWheels;
boolean hasEngine;
//Method
void run(){
System.out.println(“I am running”);
}
}
Class versus Object
• คลาส (Classes)
รูปแบบ <modifiers> class <class_name> {
[<attribute_declarations>]
[<constructor_declarations>]
[<method_declarations>]
}
modifiers = ระดับการเข้าถึง [public, <default> ไม่ระบุ หมายถึง package]
Class versus Object
• ออปเจ็ค (Object)
– คือสิ่ งที่มีคุณสมบัติและพฤติกรรมตามที่กาหนดไว้ในคลาส
– วัตถุในภาษาจาวาเราเรี ยกว่า อินสแตนท์ (Instance)
– การนาคลาสมาใช้งานโดยการสร้างวัตถุตามนิยามของคลาส
เรี ยกว่า วิธีสร้ างอินสแตนท์ (Instance)
การสร้ างอินสแตนท์ (Instance)
• ตัวอย่ าง การสร้ างอินสแตนท์ (Instance)
public class BuildCar {
public static void main (String[] args) {
new Vehicle(); // (1) Create new Instance
new Vehicle(); // (2) Create new Instance
System.out.println(“Two cars have been built.”);
}
}
Subclassing
• Employee class
Employee
-name : String = “”
-salary : double
-birthDate : Date
+getDetails() : String
Class Diagram
public class Employee {
//Attributes
private String name =“”
private double salary;
private Date birthDate;
//Method
public String getDetails() {...}
}
Subclassing
• Manager class
Manager
-name : String = “”
-salary : double
-birthDate : Date
-department : String
+getDetails() : String
Class Diagram
public class Manager{
//Attributes
private String name =“”
private double salary;
private Date birthDate;
private String department;
//Method
public String getDetails() {...}
}
Subclassing
Superclass
or
Parentclass
Subclass
or
Childclass
Employee
-name : String = “”
-salary : double
-birthDate : Date
+getDetails() : String
Manager
-department : String
public class Employee{
//Attributes
private String name =“”
private double salary;
private Date birthDate;
//Method
public String getDetails() {...}
}
public class Manager extends Employee{
private String department;
}
Java Programming Part III
• Single Inheritance
– การสื บทอด Class สามารถสื บทอดได้ จาก Class เดียว
รู ปแบบ <modifiers> class <name> [ extends <superclass>] {
<declarations>
}
An Example Inheritance Tree
Employee
-name : String = “”
-salary : double
-birthDate : Date
+getDetails() : String
Engineer
Manager
-department : String
Director
-carAllowance : double
+ increaseAllowance()
Secretary
Access Control
• Access Level
– Variable และ Method (public, protected,default ,private)
– Classes (public ,default)
Modifier
private
default
protected
public
Same Class
Yes
Yes
Yes
Yes
Same Package
Subclass
Universe
Yes
Yes
Yes
Yes
Reference Variable versus Instance
• ตัวแปรอ้างอิง (Reference Variable )
– คือ ตัวแปรที่ใช้เก็บเลขบอกตาแน่งในแรม หรื อตัวชี้อินสแตนท์
– ไม่มีชื่อเรี ยกเฉพาะ เนื่องจากชื่อจะเปลี่ยนไปตามชื่อคลาสของ
อินสแตนท์ที่ช้ ี
• อินสแตนท์ (Instance)
– วัตถุในภาษาจาวา
– การสร้าง อินสแตนท์ทาได้โดยการใช้คียเ์ วิร์ด new
– การทาลาย อินสแตนท์ จะถูกทาลายด้วยระบบ Garbage Collector
โดยอัตโนมัติเมื่อไม่มีการอ้างถึงตัวแปรอ้างอิง
Reference Variable versus Instance
• การกาหนดตัวแปรอ้างอิงไปยังอินสแตนท์
วิธีที่ 1. กาหนด 2 Statement
รูปแบบ
Class_Name Reference_Name
Reference_Name = new Class_Constructor(Parameter_List)
Double d1;
d1 = new Double(100.50);
Reference Variable versus Instance
• การกาหนดตัวแปรอ้างอิงไปยังอินสแตนท์
วิธีที่ 2. กาหนด 1 Statement
รูปแบบ
Class_ Name Reference_ Name = new Class_Constructor( Parameter_ List )
Integer x = new Integer(55);
x = null;
• การกาหนดค่ า null หมายถึง การทาให้ไม่มีการอ้างหรื อชี้ไปยังตาแหน่งใด ๆ
Method
• คอนสตรัคเตอร์ (Constructors)
• เมธรอดตั้งค่า และ เมธรอดรับค่า (Mutation and Assessor)
• โอเวอร์โหลดดิ่ง (Overloading)
คอนสตรัคเตอร์ (Constructors)
• ถูกเรี ยกใช้งานเมื่อมีการสร้างอินสแตนท์ (Instance)
• ใช้สาหรับการกาหนดค่าเริ่ มต้นให้กบั ตัวแปรอินสแตนท์
• คลาสหนึ่งคลาส สามารถกาหนดคอนสตรัคเตอร์ (Constructors) ที่มี
พารามิเตอร์ได้หลายรู ปแบบ
• คอนสตรัคเตอร์ (Constructors) ไม่มีการกาหนดการคืนค่า เหมือน
เมธรอดทัว่ ไป
• ชื่อเหมือนชื่อ Class
Java Programming Part III
• Constructors
รู ปแบบ <modifiers> <class_name>([<argument_list>]) {
[<statements>]
}
public class Vehicle{
• int numberOfWheels; boolean hasEngine;
//คอนสตรัคเตอร์ ปกติ
•
Vehicle(){
•
numberOfWheels = 4;
•
hasEngine = true;
•
}
//คอนสตรัคเตอร์ โอเวอร์ โหลด
•
Vehicle(int number, boolean engine) { // (1)
•
numberOfWheels = number;
•
hasEngine = engine;
•
System.out. println("A car has been built.");
•
}
• }
เมธรอดตั้งค่าและเมธรอดรับค่า (Mutation and Assessor)
• เมธรอดตั้งค่ า (Mutation)
– สาหรับการกระทาเพื่อเปลี่ยนแปลงค่าของ Data ภายในอินสแตนท์
– นาหน้าด้วย set เช่น setName()
• เมธรอดรับค่ า (Assessor)
– สาหรับการกระทาเพื่อดึงหรื ออ่านค่าของ Data ภายในคลาส
– นาหน้าด้วย get เช่น getName()
โอเวอร์โหลดดิ่ง (Overloading)
• คือ Method ที่มีชื่อซ้ ากัน
• การใช้ พิจารณาจาก Argument เป็ นหลัก แบ่งออกเป็ น 3 แบบ
1. ประเภทต่ าง
cal (String s)
cal (int x)
2. จานวนต่ าง
cal (int x)
cal (int x,int j)
3. ลาดับต่ าง
cal(int x ,String s)
cal(String s,int x)
class Vehicle {
int numberOfWheels;
boolean hasEngine;
void run(int mile){ // (1)
System.out.println(“I am running on the ” + mile + “th mile.” );
}
void run(float mile){ // (2)
System.out.println(“I am running on the ” + mile + “th mile.” );
}
}
public class DriveACar {
public static void main (String[] args) {
Vehicle myCar = new Vehicle();
myCar.run(10); // (3)
myCar.run(10.0F); // (4)
}
}
โอเวอร์รายดิ่ง (Overriding)
• คือ การเปลี่ยนแปลงคุณสมบัติที่สืบทอดมา
• subclass สามารถสร้าง Method ที่มีการทางานต่างจาก SuperClass
แต่มีขอ้ กาหนด ที่เมื่อทาการ override แล้วต้องเหมือน SuperClass
ดังนี้
1. Name
2. Return Type
3. Argument List
• subclass ห้ามมีการเข้าถึงต่ากว่า SuperClass
public class Employee{
//Attributes
private String name =“”;
private double salary;
private Date birthDate;
//Method
public String getDetails() {
return “Name : “+ name + “\n”+
“Salary : ” + salary;
}
}
public class Manager extends Employee{
//Attributes
private String department;
//Method
public String getDetails() {
return “Name : “+ name + “\n”+
“Salary : ” + salary + “\n”+
“ Manager of : “ + department ;
}
}
The super Keyword
• อ้างถึง Method ของ SuperClass ใช้เมื่อมีการ Override และจะต้อง
เรี ยกเป็ น Statement แรกเสมอ
public class Employee{
private String name =“”;
private double salary;
private Date birthDate;
public String getDetails() {
return “Name : “+ name + “\n”+
“Salary : ” + salary;
}
}
public class Manager extends Employee{
private String department;
public String getDetails() {
// Call parent Method
return super.getDetails() +
“\n Department : “ +department ;
}
}
The instanceof Operator
• ใช้ในการตรวจสอบ parent จะ return ค่าเป็ น boolean
public class Employee extends Object
public class Manager extends Employee
public class Engineer extends Employee
public void doSomething (Employee e) {
if (e instanceof Manager){
//Process Manager
}else if (e instanceof Engineer){
//Process Engineer
}else{
//Process any other type of Employee
}
}
Advanced Class Features
•
•
•
•
•
static variables, methods, and initializers
final classes,methods and variables
abstract classes and methods
inner classes
interface
The static Keyword
• ใช้กบั variables, methods และ inner classes
• ใน memory เก็บที่เดียว ไม่ใช่ Global Variable ใช้ได้เฉพาะ
Object ที่ใช้งานร่ วมกัน
– Attribute มีชีวิตเมื่อสร้าง Object (new)
– static มีชีวติ เมื่อ Load Class
Class Attributes
Count
+counter : int = 0
-serialNumber : int
<<instanceOf>>
<<instanceOf>>
c1 : Count
serialNumber = 1
c2 : Count
serialNumber = 2
public class Count {
private int serialNumber;
public class OtherClass {
public static int counter = 0;
public void incrementNumber () {
Count.counter++;
public Count() {
}
counter++;
}
serialNumber = counter;
/*
ไม่ ต้องทาการสร้ าง Object
}
เพียงแต่ ระบุ Class และตัวแปร
}
*/
Class Methods
public class Count {
private int serialNumber;
public TestCounter {
public static void main (String[] args) {
public static int counter = 0;
System.out.println(“Number of counter is ”
+ Count.getTotalCount());
public static int getTotalCount(){
return counter;
}
Count c1 = new Count();
public Count(){
System.out.println(“Number of counter is ”
+ Count.getTotalCount());
counter++;
}
serialNumber = counter;
}
}
}
//The Output is:
Number of counter is 0
public class Count {
Number of counter is 1
private int serialNumber;
public static int counter = 0;
public static int getTotalCount(){
//COMPILER ERROR
return serialNumber; }
}
ภายใน static ห้ ามเรียกใช้ non-static
(ทั้ง Attribute และ Method)
Static Initializers
public class Count {
private int serialNumber;
public TestCounter {
public static void main (String[] args) {
public static int counter = 0;
System.out.println(“Number of counter is ”
+ Count.getTotalCount());
public static int getTotalCount(){
return counter;
}
Count c1 = new Count();
public Count(){
System.out.println(“Number of counter is ”
+ Count.getTotalCount());
counter++;
}
serialNumber = counter;
}
}
}
//The Output is:
Number of counter is 0
public class Count {
Number of counter is 1
private int serialNumber;
public static int counter = 0;
public static int getTotalCount(){
//COMPILER ERROR
return serialNumber; }
}
ภายใน static ห้ ามเรียกใช้ non-static
(ทั้ง Attribute และ Method)
final classes,methods and variables
Abstract Class
• คุณสมบัติ
– 1. ลูกของ abstract ต้องเอา Method มา Override
– 2. ไม่สามารถสร้าง Object แต่ประกาศตัวแปรได้
• new Vehicle() //ไม่ ได้ , Vehicle v ; //ได้
– 3. ภายใน Abstract class สามารถมี Method ธรรมดาได้
– 4. สามารถสร้าง Constructor ได้ (เรี ยกโดย subclass ไม่ใช่จาก
การ new) ควรเขียนให้อยูใ่ น modifier <protected>
The Abstract Vehicle Using a Template Method
Vehicle
public abstract class Vehicle {
- load : double = 0
public abstract double calcFuelEffiency();
-maxload : double = 0
public abstract double calcTripDistance();
#Vehicle(max_load : double)
+getLoad() : double
}
+getmaxLoad () : double
+addBox(weight : double)
+calcFuelNeeds() : double
Subclass ต้ องทาการ Override Method
ของ SuperClass
#calcFuelEfficiency() : double
#calcTripDistance() : double
Truck
RiverBarge
+Truck(max_load : double)
+RiverBarge(max_load : double)
#calcFuelEfficiency() : double
#calcFuelEfficiency() : double
#calcTripDistance() : double
#calcTripDistance() : double
public class Truck extends Vehicle {
public class RiverBarge extends Vehicle {
public Truck (double max_load);
public RiverBarge (double max_load);
public double calcFuelEffiency(){…cal..}
public double calcFuelEffiency(){…cal..}
public double calcTripDistance(){…cal..} }
public double calcTripDistance(){…cal..} }
Java Programming Part IV
Java Programming Part IV
• Exceptions Handling
• Java Servlets
• JDBC (Java Database Connectivity)
Exceptions Handling
• การตรวจสอบความผิดพลาดที่เกิดขึ้นขณะใช้งานโปรแกรม
• จาวามีวิธีการที่มีประสิ ทธิภาพโดยใช้เอ็กซ์เซฟชัน่ ซึ่งเป็ นวัตถุใน
ภาษาจาวา สื บทอดมาจากคลาส Throwable ซึ่งอยูใ่ นแพคเกจ
java.lang
• ภายในคลาส Throwable มี 2 Subclasses คือ
– Error : จัดการเอ็กซ์เซฟชัน่ ที่เกิดขึ้นกับ Java Virtual Machine ซึ่ งเรามัก
แก้ไขหรื อควบคุมไม่ได้ เช่น Harddisk fail ,JVM Error
– Exception : จัดการความผิดพลาดอื่น ๆ ซึ่ งเราสามารถควบคุมได้ เช่น
การหารด้วยศูนย์
ตัวอย่าง Exception
Throwable
Error
Exception
...
InterruptedException ..
ArithmeticException
RuntimeException
..
..
IOException
NullPointerException
ตัวอย่างเอ็กซ์เซฟชัน่ ในกลุ่ม runtimeException
• ArithmeticException เกิดเมือ่ มีการกระทาทางคณิตศาสตร์ ที่ผดิ กฏเกณฑ์ เช่ น
การหารด้ วยศูนย์
• ClassCastExcception เกิดเมือ่ มีการพยายามแคสวัตถุทไี่ ม่ได้เป็ นวัตถุของ
Classes หรือ Subclasses นั้น
• IllegalArgumentException เกิดเมือ่ มีการส่ งตัวแปรผิดชนิดให้ กบั เมธรอด
• IndexOutOfBoundsException เกิดเมือ่ มีการอ้างถึงตาแหน่ งในอะเรย์ที่ไม่มอี ยู่
• NullPointerException เกิดเมือ่ มีการนาตัวแปรอ้างอิงที่มีค่าเป็ น null ไปใช้
ภายในเมธรอด
ตัวอย่าง
class DivisionByZero {
public static void main(String args[ ]){
int a = 20, b = 0;
System.out.println(a / b );
}
}
try - catch Block
การดักจับความผิดพลาดโดยการใช้ กลุ่มคาสั่ ง try – catch
รูปแบบ
try { //คาสั่ งสาหรับดักกลุ่ม Statement ทีค่ าดว่ าจะเกิด Exception
}catch ( Exception_Class1 ){ //คาสั่ งดักจับ Instance ใด ๆ ใน Exception Class
Resolve_Statement1
// กลุ่ม Statement เพือ่ ทางาน
}catch ( Exception_ClassN ){
Resolve_StatementN
}finally{ //คาสั่ งสาหรับกาหนดให้ ทา Statement ใน Final Statemet ทุก ๆ กรณี
Final_Statement // กลุ่ม Statement เพือ่ ทางานไม่ ว่าจะเกิดหรือไม่ เกิด Exception
}
try - catch Block
• ลาดับของบล็อก catch มีความสาคัญในกรณี ที่ตอ้ งการดัก Exception
มากกว่า 1 ตัว และมี Exception บางตัวที่สืบทอดกัน
• ควรเขียนเรี ยงจาก Exception ที่เป็ น Subclasses ก่อน SuperClasses
เช่น IOException , ArithmeticException , Exception
เนื่องจาก Exception เป็ น SuperClasses ของทุก Exception ถ้า
เขียนไว้ก่อน Subclasses ก็จะไม่ทางาน
คาสัง่ throws
• การโยนความรับผิดชอบให้กบั เมธรอดอื่น ที่เรี ยกใช้เมธรอดที่ควร
จะมีการดักจับ Exception ให้ทาการดักจับ Exception เอง
class DevidedByZeroDemo {
void devidedByZero() throws ArithmeticException {//(1)
int i = 20;
int j =0;
System.out.println(i/j);
}
}
public class TestException3{
public static void main(String args[]) {
try { // (2)
new DevidedByZeroDemo().devidedByZero();
} catch (ArithmeticException ae) {
System.out.println("Divided by Zero.");
}
}
}
Java Servlets
• An Introduction to Servlets
–
–
–
–
–
Servlets คืออะไร ?
การรับส่ งข้ อมูลโดยใช้ เว็บ
URL และ URI
การรับส่ งข้ อมูลระหว่ างเว็บและ Servlet
รูปแบบโครงสร้ างของ Servlet
– Servlet Architecture Overview HTTP servlets
– Servlet Life Cycle
• How to Write a servlet
– Interacting with Clients
Servlets คืออะไร ?
• Servlet คือเทคโนโลยี ที่เกิดขึ ้นมาจาก Java เพื่อใช้ งานทางด้ านการสร้ าง
โปรแกรมในรูปแบบ CGI สาหรับทางานบนเว็บเซิร์ฟเวอร์ เพื่อให้ ผลการแสดง
เว็บสูผ่ ้ อู า่ น มีการเปลี่ยนแปลงตามการใช้ งาน ซึง่ เป็ นเทคโนโลยีที่สืบ
เนื่องมาจากเหตุผลดังนี ้
- ความต้ องการให้ หน้ าเว็บเปลี่ยนตามข้ อมูลที่ผ้ อู า่ นส่งให้
- ความต้ องการให้ หน้ าเว็บเปลี่ยนตามข้ อมูลที่มีการเปลี่ยนแปลงบ่อยครัง้
- ความต้ องการให้ หน้ าเว็บเปลี่ยนตามระบบฐานข้ อมูล
การรับส่ งข้อมูลโดยใช้เว็บ
การรับส่ งข้อมูลโดยใช้เว็บ ผ่านทางแท็กฟอร์ ม <FORM ...> มีรูปแบบการส่ งอยู่
2 ลักษณะคือ GET และ POST โดยที่การส่ งแบบ GET เป็ นรู ปแบบการส่ งข้อมูล
ผ่านทาง URL ซึ่ งผูใ้ ช้อาจจะพิมพ์ได้เองโดยตรง เช่น
http://127.0.0.1?username=user1&pwd=1234
หรื อฟอร์ มที่แท็กกาหนดแอททริ บิวต์ METHOD เป็ น GET เช่น
<FORM NAME="LOGIN" METHOD="GET" >
สาหรับการส่ งข้อมูลผ่านฟอร์ มในแบบ POST คือการกาหนดแท็กฟอร์ มให้มี
แอททริ บิวต์ METHOD เป็ น POST เช่น
<FORM NAME="LOGIN" METHOD="POST" >
หมายเหตุ หากไมมี
่ การกาหนด METHOD ในฟอร์มโดย Default จะมีค่า
เป็ น GET
URL และ URI
• URL (Uniform Resource Locator) คือเส้นทางในการอ้างถึงแหล่งข้อมูลบน
อินเตอร์เน็ต URL จึงเป็ นข้อกาหนดที่สามารถเข้าถึงเอกสารที่ตอ้ งการได้
• URI (Uniform Resource Identifier) คือข้อมูลส่ วนหนึ่งของ URL ซึ่ งเป็ นกลุ่ม
ข้อมูลที่อยูต่ ่อท้ายจากชื่อเครื่ องปลายทางและหมายเลขพอร์ ต (หากระบุ) เพื่อ
ใช้สาหรับเป็ นข้อมูลดาเนินงานในส่ วนโปรแกรมที่อยูบ่ นเว็บเซิ ร์ฟเวอร์
ตัวอย่าง
เมื่อ URL คือ http://localhost:8080/servlet/HelloWorld
ดังนั้น URI คือ /servlet/HelloWorld
การรับส่ งข้อมูลระหว่างเว็บและ Servlet
• GET requests : รู ปแบบการส่ งข้อมูลผ่าน URL โดย Parameter1 และ Parameter2 คือชื่อ
พารามิเตอร์ที่ถูกเซิร์ฟเวอร์อา้ งถึงได้ ในขณะที่ Data1 และ Data2 คือข้อมูลที่อยูใ่ นพารามิเตอร์
แต่ละตัว หากต้องการส่ งข้อมูลมากกว่า 2 ตัว ก็จะเพิม่ ต่อท้ายไปได้เรื่ อยๆ เช่น
.../servlet/ViewCourse?Parameter1=Data1&Parameter2=Data2&Parameter3=D
ata3
• POST requests: เป็ นการส่ งด้วยโปรโตคอล HTTP ที่ใช้ในเว็บเป็ นตัวจัดการ การส่ งแบบนี้มี
ข้อดีที่ผอู้ ื่น ไม่สามารถล่วงรู ้ได้วา่ ลักษณะการส่ งข้อมูลไปใช้เซิ ร์ฟเวอร์ ส่ งข้อมูลอะไรไป และส่ ง
โดยการใช้พารามิเตอร์ชื่ออะไร การส่ งข้อมูลในแบบ POST ทาได้โดยการใช้ แท็ก FORM แต่
กาหนดวิธีการส่ งเป็ น POST
.../servlet/PlaceOrderProcess
รู ปแบบโครงสร้างของ Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTemplate extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException {
PrintWriter out = res.getWriter();
}
}
Servlet Architecture Overview HTTP servlets
parameters, protocol, remote host,
ServerInputStream(binary data etc..)
Servlet
interface
ServletRequest
GET
doGet(ServletRequest req, ServletResponse res);
Servlet
ServletResponnse
Client
ServletRequest
POST
doPost(ServletRequest req, ServletResponse res);
Servlet
ServletResponse
mime type to reply,reply data,
ServletOutputStream
IS-A
Servlet Life Cycle
Server loads Servlets
- run init method
No Concurrency Issue
Server runs init only once, not per request
Servlets Accept Request from
Clients and return Data back
- run service method
service must be thread-safe
- multiple service method at a time
if that is impossible, servlet must
implement SingleThreadModel interface
Server removes Servlets
- run destroy method
Server reloads Servlets
- run init method
destroy must be thread-safe
- when server runs destroy, other threads
might be accessing shared resources
How to Write a servlet
คลาสที่จะสามารถทางานเป็ น Servlet ได้ตอ้ ง extends (สื บทอด) มา
จากคลาส javax.servlet.http.HttpServlet หากต้องการรับข้อมูลที่ส่งมาด้วย
รู ปแบบ GET ให้สร้างเมธรอดชื่อ doGet หรื อหากต้องการ รับข้อมูลที่ส่ง
มาด้วยรู ปแบบ POST ให้สร้างเมธรอดชื่อ doPost
ในเมธรอดต้องมีอาร์
กิวเม็นต์
2 ตัวคือ
HttpServletRequest สาหรับอ้างข้อมูลที่ส่งข้อมูลจากผูใ้ ช้ (จาก
ตัวอย่างอ้างด้วยตัวแปร req)
HttpServletResponse สาหรับส่ งข้อมูลกลับไปยังผูใ้ ช้ ทั้งที่เป็ น
ข้อมูล Header และส่ วนเนื้อความ (BODY) (จากตัวอย่างอ้างด้วยตัวแปร res)
How to Write a servlet
• เมื่อต้องการส่ งเนื้อความสู่ ผใู ้ ช้ มักจะส่ งไปให้คลาส PrintWriter จัดการอีกที
• คลาสดังกล่าวมีส่วนตรวจสอบข้อผิดพลาด หรื อ Exception Handling โดย
อาศัยคลาส ServletException และ IOException โดยตรวจจับในเมธรอด
• import ถูกใช้เพื่อเรี ยกใช้งานคลาสต่างๆ ในแพ็กเกจที่สนับสนุนการทางาน
Servlet ดังนี้
– import java.io.*
– import javax.servlet.*
– import javax.servlet.http.*
สาหรับคลาส PrintWriter
สาหรับคลาส HttpServlet
สาหรับคลาส HttpServletRequest และ
HttpServletResponse
First Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException {
//res.setContentType("text/html");
res.setContentType("text/html; charset=tis-620"); //Thai Lang.
PrintWriter out = res.getWriter();
out.println("<title>First Servlet</title>");
out.println("<H1>สวัสดี Servlet !</H1>");
}
}
JDBC (Java Database Connectivity)
• JDBC คืออะไร ?
• JDBC driver types
• การใช้ งาน JDBC
JDBC คืออะไร ?
• Java DataBase Connectivity หรื อ JDBC คือมิดเดิลแวร์ที่ถูกใช้บน
เทคโนโลยีจาวา ในการเข้าถึงระบบฐานข้อมูล โดยสามารถเรี ยกใช้
งานข้อมูล หรื อจัดการระบบฐานข้อมูลผ่าน คาสัง่ SQL-92 หรื อ
ภาษา SQL มาตรฐาน
JDBC driver types
• JDBC ซึ่งเป็ นมิดเดิลแวร์ตวั หนึ่ง มีรูปแบบและชื่อเรี ยกที่แบ่ง
ออกเป็ น 4 แบบด้วยกันคือ Type 1, Type 2, Type 3 และ Type
4 โดยเป็ นข้อกาหนดที่ถูกกาหนดมาโดยบริ ษทั ซัน ไมโครซิส
เท็มซ์ ซึ่งเป็ นผูก้ าหนดรายละเอียดของแต่ละประเภท ดังนี้
– Type1: JDBC-ODBC Bridge
– Type2: Partial Java Driver
– Type 3: Pure Java Driver
– Type 4: Direct-to-DB
Type1: JDBC-ODBC Bridge
• หมายถึง JDBC ที่ทางานอยูบ่ นชั้นการสื่ อสารมิดเดิลแวร์ทชี่ ื่อ ODBC อีกที
หนึ่ง เนื่องจากการทางานของคอมพิวเตอร์บนพื้นฐานของระบบปฏิบตั ิการ
ไมโครซอฟต์วินโดว์ส มีมิดเดิลแวร์ที่ชื่อ ODBC เป็ นมาตรฐานในการ
สื่ อสารอยูแ่ ล้ว และเนื่องมาจากระบบที่พฒั นาให้ใช้งานบนวินโดว์ส่วน
ใหญ่กม็ กั จะถูกพัฒนาโดยอาศัย ODBC มาช่วยในการทางานอยูด่ ว้ ย ดังนั้น
ในการสร้างโปรแกรมด้วยภาษาจาวาให้สามารถทางานอยูบ่ นพื้นฐาน
ODBC เดิม เพื่อหลีกเหลี่ยงปัญหาอันเกิดจากความยุง่ ยากในการติดตั้ง และ
ต้องแปลงระบบที่ใช้อยูไ่ ปเป็ นระบบใหม่ท้ งั หมด
ดังนั้นเมื่อมีการพัฒนาโปรแกรมด้วยภาษาจาวา โดยมีการใช้งาน
ระบบเดิมที่เรี ยกใช้ ODBC อยูแ่ ล้ว จึงนิยมที่จะพัฒนาโปรแกรมในรู ปแบบ
การใช้งาน JDBC ประเภทที่ 1
Type1: JDBC-ODBC Bridge
• ลักษณะของการนาไปใช้งาน
ถูกใช้สาหรับการศึกษาวิธีการเขียนโปรแกรมจาวา เพื่อติดต่อกับ JDBC
(ซึ่ งในหนังสื อจะมีการอ้างถึง JDBC ประเภทนี้ในตัวอย่าง)
เหมาะกับระบบงานที่มี ODBC ในการใช้งานอยูแ่ ล้ว
สาหรับระบบงานที่ท้ งั หมดทางานอยูบ่ นพื้นฐานของแพลตฟอร์ มวินโดว์
• ข้อด้อยของการนาไปใช้งาน
ไม่เหมาะกับการนาไปใช้งานบนระบบงานที่มีขนาดใหญ่ๆ เนื่องจากทา
ให้เกิดความช้าในการทางาน และประสิ ทธิ ภาพในการทางานที่ไม่ดี
มีขอ้ มูลในส่ วนโอเวอร์ เฮด(Overhead) สู ง เนื่องจากต้องมีส่วนในการ
ติดต่อระหว่าง JDBC และ ODBC เพิม่ เติม
ไม่สนับสนุนความสามารถทั้งหมดของมาตรฐาน JDBC เนื่องจาก
ข้อจากัดของ ODBC ที่มีรูปแบบการทางานน้อยกว่า JDBC
Type2: Partial Java Driver
• สาหรับ JDBC ประเภทนี้ ตัวไดรเวอร์ (มิดเดิลแวร์ของแต่ละผลิตภัณฑ์
มักจะใช้คาว่าไดร์เวอร์แทนมิดเดิลแวร์ตวั นั้นๆ) จะถูกโหลดไว้ที่ไคล
แอนท์ (Client) หรื อเทียร์ (Tier) ส่ วนติดต่อกับผูใ้ ช้
ดังนั้นรู ปแบบในการสร้างโปรแกรมไคลแอนท์จะต้องพยายามโหลด
ไดร์เวอร์ของผลิตภัณฑ์เซิร์ฟเวอร์ที่ตอ้ งการติดต่อด้วย เช่น ถ้ามีระบบ
ฐานข้อมูล Oracle โปรแกรมในส่ วนไคลแอนท์ตอ้ งสร้างคาสั่งในการ
โหลดไดร์เวอร์ Oracle ขึ้นใช้งาน ซึ่งแตกต่างกันในแต่ละระบบฐานข้อมูล
Type2: Partial Java Driver
• ลักษณะของการนาไปใช้งาน
 มีประสิ ทธิภาพในการดีกวาประเภท
1 (Type1) เมื่อ
่
เปรี ยบเทียบกัน
คาสั่ งในการติดตอกั
่ ี
่ บเซิรฟเวอร
์
์ จะเป็ นคาสั่ งทีด
ที่สุดสาหรับเซิ ร์ฟเวอร์ น้ นั ๆโดย เฉพาะ ทาการทางานโดยรวมดีกว่า
• ข้อด้อยของการนาไปใช้งาน
 ผู้ใช้โปรแกรมในส่วนไคลแอนทยั
้
์ งตองการไดร
์
เวอร์ สาหรับเซิ ร์ฟเวอร์โดย เฉพาะเมื่อมีการเปลี่ยนแปลงเซิ ร์ฟเวอร์ เป็ น
ผลิตภัณฑ์ตวั อื่น โปรแกรมในส่ วนไคลแอนท์ตอ้ งมีการเปลี่ยนแปลงและ
คอมไพล์ใหม่เสมอ
Type 3: Pure Java Driver
• ในการใช้งานสถาปัตยกรรมแบบ Multi-Tier ที่จาเป็ นต้องมีแอพปลิเคชัน่
เซิร์ฟเวอร์ทางานร่ วมอยูใ่ นระบบ แอพปลิเคชัน่ เซิร์ฟเวอร์จะมาลดข้อ
ยุง่ ยากในการติดตั้งหรื อดูแลระบบในส่ วนเทียร์ไคลแอนท์ ดังนั้นลักษณะ
ของ JDBC ในประเภทที่ 3 คือการนาเอา JDBC ไดร์เวอร์ไปวางไว้ที่ตวั
แอพปลิเคชัน่ เซิร์ฟเวอร์ เพื่อเป็ นตัวเชื่อมโยงการสื่ อสารไปหาเซิร์ฟเวอร์
Type 3: Pure Java Driver
• ลักษณะของการนาไปใช้งาน
เป็ นระบบที่มีประสิ ทธิ ภาพในการทางานที่ดีกว่าประเภทที่ 1 และ 2 เมื่อ
เปรี ยบเทียบกัน
เหมาะสาหรับองค์กรที่มีเซิ ร์ฟเวอร์ทางด้านฐานข้อมูลที่หลากหลายรู ปแบบ
การทางานของไคลแอนท์ไม่จาเป็ นต้องติดตั้ง JDBC ไดร์เวอร์ไว้ในทุกตัว
การติดตั้งและการดูแลระบบไคลแอนท์ทาได้ง่าย และสะดวก
• ข้อด้อยของการนาไปใช้งาน
ยังต้องการไดร์ เวอร์ สาหรับแต่ละผลิตภัณฑ์ เพื่อติดตั้งไว้ที่แอพปลิเคชัน่
เซิ ร์ฟเวอร์
Type 4: Direct-to-DB/Native Protocol
• ลักษณะการทางานของ JDBC ในประเภทที่ 4 มีการทางานโดยการส่ ง
คาสัง่ SQL จากไคลแอนท์ไปที่เซิร์ฟเวอร์ฐานข้อมูลโดยตรงผ่านระบบ
เครื อข่าย โดยที่รูปแบบคาสัง่ SQL จะต้องเป็ นไปตามข้อกาหนดของระบบ
ฐานข้อมูลแต่ละตัวที่เลือกใช้อยู่ ดังนั้นจะเห็นว่าการโต้ตอบของเซิร์ฟเวอร์
กับคาสัง่ SQL สามารถทางานได้รวดเร็ ว ทาให้ JDBC ประเภทนี้มีรูปแบบ
การทางานที่รวดเร็ ว แต่กจ็ าเป็ นต้องสร้างไคลแอนท์สาหรับฐานข้อมูลแต่
ละระบบซึ่งในบางครั้งไคลแอนท์สาหรับฐานข้อมูลตัวหนึ่งจึงไม่สามารถ
นาไปใช้กบั ระบบฐานข้อมูลตัวอื่นๆได้
Type 4: Direct-to-DB/Native Protocol
• ลักษณะของการนาไปใช้งาน
มีประสิ ทธิ ภาพในการทางานดีที่สุด เมื่อเทียบกับทุกประเภทที่กล่าวมา
• ข้อด้อยของการนาไปใช้งาน
มีความยุง่ ยากในการพัฒนาโปรแกรมเพื่อทางานในฝั่งไคลแอนท์ เพราะผูพ้ ฒั นา
ต้องเรี ยนรู ้การทางานของเซิ ร์ฟเวอร์ แต่ละตัวก่อน
Conceptual View
server
client
JDBC Driver Manager
JDBC-ODBC
Bridge
Partial Java
Driver
ODBC Driver
DB Client
Pure Java
Direct-to-DB
Driver
DB Server
DBMS
DBMS
DBMS
DBMS
Common Terms
การใช้งาน JDBC
Driver
Manager
Loads the driver, and manages connections.
Driver
Translates Java API calls into specific database operations.
Connection
Session between an application and a database.
Statement
An SQL statement or query.
ResultSet
Logical table returned by executing a statement.
Metadata
Information about returned data, the database and the driver.
การใช้งาน JDBC
การติดต่ อกับฐานข้ อมูล
1.1 ขั้นตอนการโหลดไดรเวอร์เพื่อใช้งาน
รู ปแบบ Class.forName ("Driver_Name")
ตัวอย่ าง
try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.err.print (e.getMessage ());
}
การใช้งาน JDBC
1.2 การติดต่อไปยังระบบฐานข้อมูล
รู ปแบบ
Connection Instance_Name = DriverManager.getConnection(URL, Login, Password)
รู ปแบบ URL
jdbc:<subprotocol>:<subname>
<subprotocol> คือโพรโตคอลการสื่ อสารข้อมูล เพื่อเจอจงไปยังเครื่ องหรื อระบบ
ปลายทาง ซึ่ งมีขอ้ มูลแตกต่างกันไปตามรู ปแบบการสื่ อสาร เช่น odbc สาหรับการสื่ อสาร
ผ่านระบบ ODBC
<subname> คือฐานข้อมูลภายในระบบที่อา้ งผ่าน subprotocol หรื อแหล่งข้อมูล
การใช้งาน JDBC
ตัวอย่ าง
try {
String URL = "jdbc:odbc:myDSN";
Connection con = DriverManager.getConnection
(URL,"myLogin","myPassword");
}catch (SQLException s) {
System.err.print (s.getMessage ());
}
การใช้งาน JDBC
การสร้ าง Statement / PreparedStatement
• Statement ใช้สาหรับสร้างคาสัง่ SQL ที่เป็ นข้อมูลคงที่ ไปยัง
ฐานข้อมูลและคืนผลลัพธ์กลับมา (ข้อมูลในคาสัง่ SQL ไม่
เปลี่ยนแปลง)
• PreparedStatement ใช้สาหรับสร้างคาสัง่ SQL ที่สามารถเปลี่ยนแปลง
ข้อมูลบางส่ วนภายในตามพารามิเตอร์ที่ตอ้ งการใช้งาน
ตัวอย่ าง
Code Fragment 1:
String updateString = "UPDATE COFFEES SET SALES = 75 " +
"WHERE COF_NAME LIKE 'Colombian' ";
stmt.executeUpdate(updateString);
Code Fragment 2:
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate()
การใช้งาน JDBC
การส่ งคาสั่ ง SQL ให้ กบั ฐานข้ อมูล
• เมธรอดที่ถูกกาหนดไว้สาหรับส่ งคาสัง่ SQL ไปให้กบั ฐานข้อมูล
ถูกแบ่งตามรู ปแบบคาสัง่ SQL ได้ 2 แบบ โดยผูใ้ ช้ตอ้ งเลือกเมธ
รอดที่เหมาะสมกับคาสัง่ SQL ที่ใช้งานคือ
– SQL เป็ นประเภทดาเนินการ ซึ่งสร้ างด้ วยคีย์เวิร์ดจาพวก CREATE,
ALTER, DROP, INSERT, UPDATE, DELETE ต้ องใช้ งานผ่ าน
เมธรอด ExecuteUpdate
– SQL เป็ นประเภทสื บค้ นข้ อมูล ผลลัพธ์ ทตี่ ้ องการกลับมา ในรู ปของกลุ่ม
ข้ อมูลเรคอร์ ด (Record Set) ต้ องเรียกใช้ งานผ่านเมธรอด ExecuteQuery
และต้ องมีคลาสมารับผลลัพธ์ ทไี่ ด้ รับกลับมาในรู ปแบบของกลุ่มเรคอร์ ด
คือคลาส ResultSet
การใช้งาน JDBC
การส่ งคาสั่ ง SQL ให้ กบั ฐานข้ อมูล (ต่ อ...)
• เมธรอดทั้งสองรู ปแบบดังกล่าว สามารถเรี ยกใช้งานได้จากคลาส
Statement และคลาส PreparedStatement อย่างใดอย่างหนึ่ง แต่ท้ งั
สองคลาสดังกล่าวใช้สาหรับการสร้างคาสัง่ SQL
ตัวอย่ าง
Connection con = DriverManager.getConnection ( url, "myLogin", "myPassword");
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)");
Statement stmt = con.createStatement();
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
ResultSet rs = stmt.executeQuery(query);
การใช้งาน JDBC
การแสดงผลลัพธ์
• ผลลัพธ์ในชุด ResultSet มีโครงสร้างคล้ายกับข้อมูลใน TABLE คือ
แบบออกเป็ นแนวแถวเรี ยกว่า Row (หรื อเรคอร์ด) และแนวคอลัมน์
เรี ยกว่า Column (หรื อฟิ ลด์) ดังนั้นหลักการดึงข้อมูลคือต้องระบุ
row ให้ชดั เจนก่อนแล้วจึงค่อยระบุ column ที่ตอ้ งการ
ตัวอย่ าง
Statement stmt = con.createStatement();
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String s = rs.getString("COF_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + " " + n);
}
Output :
Colombian 7.99
French_Roast 8.99
Espresso 9.99
Colombian_Decaf 8.99
French_Roast_Decaf 9.99
การใช้งาน JDBC
การปิ ดการติดต่ อกับฐานข้ อมูล
• คือการปิ ดการใช้งาน Instance ที่ใช้สร้าง ResultSet ,Statement และ
Connection
• ใช้งานผ่านเมธรอด close()
ตัวอย่าง
rs.close();
stmt.close();
con.close();
สรุ ปการใช้งาน JDBC
 import java.sql.*
 load the driver
 create a Connection object
 create a Statement/PreparedStatement object
 execute a query
 get data from the ResultSet object
 close the objects