Tải bản đầy đủ (.pdf) (25 trang)

Lap Trinh java bai giang chuong 6

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (619.84 KB, 25 trang )

Môn học: Lập trình cơ bản với Java
Chương VI: Kết nối với cơ sở dữ liệu

Th
Mục đính – Yêu cầu:
Sau khi học xong bài này sinh viên sẽ nắm được:


n



n

 C

ơ

n

C

C



C
nh




nC

Số tiết lên lớp: 8
Bảng phân chia thời lượng:
Stt
01
02
03

Nội dung
n
ơ n
C
n C
C
C hư n h ợ
nC

Số tiết
2
3
3

Trọng tâm bài giảng:


n




n

 C

ơ


n JDBC.

C

C
nh



nC

242


6.1.

iới hiệ

n
hương ình m y ính h n này đ u ít nhiều

Hầu h
hông n ong


n qu n đ n vi c truy xuất

ơ sở dữ li u. Chính vì th nên các thao tác h trợ lập ình ơ sở dữ

li u là chứ năng không hể thi u c a các ngôn ngữ lập trình hi n đạ , ong đó ó
C API à hư
cập đ n các h

n chứa các l p và giao di n h trợ lập trình viên Java k t n i và truy

ơ sở dữ li u.

Phiên b n JDBC API m i nhất hi n nay là 3.0, là một thành phần trong J2SE, nằm
ong 2 gó hư

n:

 java.sql: chứa các l p à g o d n ơ sở c a JDBC API.
 javax.sql: chứa các l p và giao di n mở rộng.
JDBC API cung cấp ơ h cho phép mộ
độc lập v i các h

ơ sở dữ li u, có kh năng uy ập đ n các h

mà không cần vi t lạ
vấn Q
6.2.

hương ình


t bằng Java có kh năng
ơ sở dữ li u khác nhau

C đơn g n hóa vi c tạo và thi hành các câu truy

ong hương ình

iến

c

n

Ki n trúc c a c
ki n

hương ình

này

hông qu
đ n bộ qu n

2] trang 629)

C ương ự như k n trúc ODBC do Microsoft xây dựng. Theo

h o


n qu n đ n ơ sở dữ li u ong hương ình được thực hi n

C API

u đó

C API sẽ truyền các yêu cầu c

hương trình

ình đ ều khiển JDBC, là bộ phận có nhi m vụ lựa chọn ình đ ều khiển

thích hợp để có thể làm vi c v

ơ sở dữ li u cụ thể mà hương ình mu n k t n i.

Như ậy ki n trúc c a JDBC gồm 2 tầng: tầng đầu tiên là các JDBC API, có nhi m
vụ chuyển các câu l nh SQL cho bộ qu n
JDBC Driver API, thực hi n nhi m vụ li n h v
li u cụ thể.

243

ình đ ều khiển JDBC; tầng thứ 2 là các
ình đ ều khiển c a h qu n trỉ ơ sở dữ


Hình

n dư i minh họa các l p và giao di n ơ


244

n trong JDBC API.


6.3. Các khái niệm cơ bản ([1] trang 282, [2] trang 632)
6.3.1. JDBC Driver
Để có thể ti n hành truy cập đ n các h qu n trị ơ sở dữ li u s dụng kỹ thuật
JDBC, chúng ta cần ph

ò ình đ ều khiển JDBC c a h qu n trị CSDL mà chúng ta

đ ng s dụng. T ình đ ều khiển

C à đoạn hương ình, do hính nhà ây dựng h

qu n trị CSDL hoặc do nhà cung ứng thứ ba cung cấp, có kh năng y u ầu h qu n trị
CSDL cụ thể thực hi n các câu l nh SQL.
nh s h
Sun

cung

ình đ ều khiển JDBC cho các h qu n trị CSDL khá nh u được
cấp



cập


nhật

liên

tục

tạ

địa

chỉ:

/>C

ình đ ều khiển

C được phân làm 04 loại khác nhau:

 Loại 1: có tên gọ à
CSDL thông qua cầu n

dge
O

e T ình đ ều khiển loại này k t n i v i các h
C Đây hính à ình đ ều khiển được s dụng phổ

bi n nhất trong những ngày đầu Java xuất hi n Tuy nh n, ngày n y ình đ ều
khiển loại này không còn phổ bi n do có nhiều hạn ch T ình đ ều khiển loại này

uôn được cung cấp kèm trong bộ J2SE v i tên: sun.jdbc.odbc.JdbcOdbcDriver.

 Loại 2: Có tên gọ à N
lời gọi c

e API

C API s ng hư

e T ình đ ều khiển loại này sẽ chuyển các
n hàm (API) ương ứng v i từng h CSDL cụ

thể T ình đ ều khi n loạ này hường chỉ do nhà xây dựng h CSDL cung
cấp Đểcó thề h hành hương ình mã
ph được cung cấp đ kèm

nh để làm vi c v i h CSDL cụ thể cần

hương ình

245


 Loại 3: có tên gọi là JDBC-Ne

e T ình đ ều khiển loại này sẽchuyển các lời

gọi JDBC API sang một dạng chuẩn độc lập v i các h C

, à s u được chuyển


sang lời gọi c a h CSDL cụ thể bỡ 1 hương ình ung g n T ình đ ều khiển
c a các nhà cung ứng thứ 3 hường thuộc loại này. Lợi th c

ình đ ều khiển loại

này là không cần cung cấp mã l nh kèm theo và có thể s dụng cùng một trình
đ ều khiển để truy cập đ n nhiều h CSDL khác nhau.

 Loại 4: Có tên gọ à N

ePoo o

e T ình đ ều khiển loại này chuyển các

lời gọi JDBC API sang mã l nh c a h CSDL cụ thể Đây à

ình đ ều khiển

thần Ja , ó nghĩ à không ần ph i có mã l nh c a h CSDL cụ thể khi thi hành
hương ình

6.3.2. JDBC URL
Để có thể k t n i v i CSDL, chúng ta cần
thông s

định nguồn dữ li u cùng v i các

n qu n dư i dạng 1 UR như s u: jd :<su p o o o >:<dsn>:<o hers>


T ong đó:
 <su p o o o >: đượ dùng để

định ình đ ều khiển để k t n i v i CSDL.
246


 <dsn>: địa chỉ CSDL. Cú pháp c a <dsn> phụ thuộc vào từng ình đ ều khiển cụ
thể.
 <other>: các tham s khác
Ví dụ:
 jd :od :d n me à UR

để k t n i v i CSDL tên dbname s

dụng cầu n i

ODBC.
 jd :m
Q
6.4.

osof :sq se e ://hos n me:1433 à UR để k t n i v i CSDL Microsoft

e e T ong đó hos n me à n m y à

ế nối

ới


Q

e e

n

Vi c k t n i v i CSDL bằng

C được thực hi n qu h

ư : đăng k

ình đ ều

khiển JDBC; ti p theo thự h phương hức getConnection() c a l p DriverManager.
6.4.1. Đăn ký

ình điều khiển

T ình đ ều khiển
h

đơn

g n

C được nạp khi mã bytecode c

để


C ss fo N me(“<

thực
C

hi n

công

vi c

này

nó được nạp vào JVM. Một


thự

h

phương

hức

e >”)

Ví dụ: để nạp ình đ ều khiển s dụng cầu n i ODBC do Sun cung cấp, chúng ta s dụng
câu l nh s u C ss fo N me(“sun jd

od


d Od

e ”)

6.4.2. Thực hiện kết nối
u kh đã nạp trình đ ều khiển JDBC, vi c k t n i v
mộ

ong

C

được thực hi n v i

phương hức sau trong l p DriverManager:

 public static Connection getConnection(String url) throws SQLException: thực
hi n k t n i v

C

được yêu cầu. Bộ qu n

chọn ình đ ều khiển phù hợp trong s

ình đ ều khiển sẽ tự động lựa

ình đ ều khiển đã được nạp.


 public static Connection getConnection(String url, String user, String pass)throws
SQLException: ti n hành k t n i t i CSDL v i tài kho n user và mật mã pass.
 public static Connection getConnection(String url, Properties info) throws
Q E ep on: ương ự h
n qu định thuộc tính k t n

phương hức trên ngoài ra cung cấp thêm các thông
hông qu đ
247

ượng c a l p Properties.


K t qu
j

tr

về c

phương

hức trên là mộ

sq Conne on đượ dùng để đại di n cho k t n

đ

ượng c a l p


đ n CSDL.

6.4.3. Ví dụ
Trong phần ví dụ này chúng ta sẽ tìm hi u

h kh

nh u để k t n i v i tập tin

CSDl Access movies.mdb có một b ng tên Movies. B ng này gồm các cột number, title,
category và fomat.
Để có thể ti n hành k t n i v i Microsoft Access thông qua cầu n i ODBC sau khi
đã ạo tập tin CSDL movies.mdb, chúng ta cần ph i tạo Data Source Name cho CSDL
bằng cách vào Control Panel và chọn ODBC Data Source.

Ti p theo nhấn vào nút Add, bạn sẽ thấy hiển thị d nh s h
CSDL hi n có.

248

ình đ ều khiển


Bạn chọn Microsoft Access Driver(*.mdb) và nhấn Finish. C a sổ cấu hình cho tập
tin Access sẽ xuất hi n và nhập moviesDSN vào ô Data Source Name

Bạn nhấn nút Select và chọn tập tin CSDL cần tạo d
O để k t thúc.

249


sou e n me

u đó nhấn


u kh đã hoàn ất công vi c tạo DSN cho tập tin movies.mdb, chúng ta có thể s
dụng đoạn mã s u để ti n hành k t n i v i tập tin movies.mdb.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestConnection{
public static void main(String args[]){
Connection connection = null;
if(args.length != 1){
System.out.println("Syntax: java TestConnection " + "DSN");
return;
}
try { // load driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("Loading the driver...");
}catch(Exception e){//problem load driver,class not exist
e.printStackTrace( );
return;
}
try{
250


String dbURL = "jdbc:odbc:" + args[0];

System.out.println("Establishing connection...");
connection = DriverManager.getConnection(dbURL,"","");
ys em ou p n n("Conne

o ” + onne

on ge C

og() + “

successfully!");
// Do whatever queries or updates you want here!!!
}catch( SQLException e ){
e.printStackTrace( );
}finally{
if(connection != null){
try{
connection.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
Sau khi biên dị h đoạn hương

ình

n, h ng


ó hể thực hi n k t n i v i

CSDL bằng cách thực thi câu l nh: java TestConnection moviesDSN.

6.5.

iể

ữ liệ

kiể

ữ liệ

Trong quá trình thao tác v i CSDL, chúng ta sẽ gặp ph i vấn đề chuyển đổi giữa
kiểu dữ li u trong CSDL sang kiểu dữ li u Java h trợ à ngược lai. Vi c chuyển đổi này
được thực hi n như ong 2

ng sau.
251


SQL Type

Java Type

BIT

Boolean


TINYINT

Byte

SMALLINT

Short

INTEGER

Int

BIGINT

Long

REAL

Float

FLOAT

Double

DOUBLE

Double

DECIMAL


java.math.BigDecimal

NUMERIC

java.math.BigDecimal

CHAR

java.lang.String

VARCHAR

java.lang.String

LONGVARCHAR

java.lang.String

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp


BINARY

byte[ ]

VARBINARY

byte[ ]

LONGVARBINARY

byte[ ]

BLOB

java.sql.Blob

CLOB

Java.sql.Clob

ARRAY

Java.sql.Array

REF

Java.sql.Ref

STRUCT


Java.sql.Struct

B ng chuyển đổi từ kiểu dữ li u SQL sang Java
Java Type

SQL Type

Boolean

BIT

Byte

TINYINT

Short

SMALLINT

Int

INTEGER
252


Long

BIGINT


Float

REAL

Double

DOUBLE

java.math.BigDecimal

NUMERIC

java.lang.String

VARCHAR or
LONGVARCHAR
VARBINARY or

byte[ ]

LONGVARBINARY

java.sql.Date

DATE

java.sql.Time

TIME


java.sql.Timestamp

TIMESTAMP

java.sql.Blob

BLOB

java.sql.Clob

CLOB

java.sql.Array

ARRAY

java.sql.Ref

REF

java.sql.Struct

STRUCT

B ng chuyển đổi từ kiểu dữ li u Java sang SQL
c h

6.6.

c cơ bản


n

n

Các thao tác truy vấn CSDL chỉ có thể được thực hi n s u kh đã ó đ
Conne

on, được tạo ra từ quá trình k t n i vào CSDL. Chúng ta s dụng đ

l p Conne
s

emen

ượng c a

on để tạo ra các thể hi n c a l p java.sql.Statement. Sau khi tạo

ượng c a l p Statement chúng ta có thể thực hi n
n onne

h o

ong

ượng
đ i

đ


ượng

on ương ứng. Nội dung trong một statement chính là các câu

SQL. Câu l nh SQL trong các statement chỉ được thực hi n khi chúng ta g

h ng đ n

CSDL. N u câu l n SQL là một câu truy vấn nội dung thì k t qu tr về sẽ là một thể hi n
c al pj

sq Resu

qu là mộ s nguy n C

e , ngược lại (các câu l nh h y đổi nội dung CSDL) sẽ tr về k t
đ

ượng c a l p ResultSet cho phép chúng ta truy cập đ n k t

qu tr về c a các câu truy vấn.
253


6.6.1. Các lớp cơ bản
 java.sql.Statement
Statement là một trong 3 l p
h o


nC

C ơ

n dùng để thể hi n một câu l nh SQL. Mọi

được thực hi n hông qu 3 phương hức c a l p Statemen Phương

thức executeQuery() nhận vào 1 tham s là chu i nội dung câu l n SQL và tr về 1 đ i
ượng kiểu Resu

e Phương hứ này được s dụng ong

ường hợp câu l nh SQL

có tr về các k t qu trong CSDL.
Phương hứ e e u eUpd e() ũng nhận vào 1 tham s là chu i nội dung câu l nh
SQL. Tuy nhi n phương hức này chỉ s dụng đượ đ i v i các cây l nh cập nhật nội
dung CSDL. K t qu tr về là s dòng bị

động bỡi câu l nh SQL.

Phương hứ e e u e() à ường hợp tổng quát c

2 phương hức tr n Phương hức

nhận vào chu i nội dung câu l nh SQL. Câu l nh SQL có thể là câu l nh truy vấn hoặc
cập nhật. N u k t qu c a câu l nh à

dòng ong C


hì phương hức tr về giá trị

ue, ngược lại tr về giá trị f se T ong ường hợp giá trị true, s u đó h ng
dùng phương hứ ge Resu

ó hể

e () để lấy các dòng k t qu tr về.

 java.sql.ResultSet
Đ
cung cấp

ượng resultset là các dòng dữ li u tr về c a câu l nh truy vấn CSDL. L p này
phương hứ để rút trích các cột trong từng dòng k t qu tr về. Tất c các

phương hứ này đều có dạng:
type getType(int | String)
T ong đó h m s có thể là s thứ tự c a cột hoặc tên cột cần lấy nội dung.
Tại 1 thờ đ ểm chúng ta chỉ có thể thao tác trên 1 dòng c

esu se Để thao tác

trên dòng ti p theo chúng ta s dụng phương hứ ne () Phương hức tr về giá trị true
ong ường hợp có dòng ti p heo, ngược lại tr về giá trị false.
6.6.2. Ví dụ truy vấn CSDL
public class Movie{
private String movieTitle, category, mediaFormat;
private int number;

public Movie(int n, String title, String cat, String format){
254


number = n;
movieTitle = title;
category = cat;
mediaFormat = format;
}
public int getNumber(){
return number;
}
public String getMovieTitle(){
return movieTitle;
}
public String getCategory(){
return category;
}
public void setCategory(String c){
category = c;
}
public String getFormat(){
return mediaFormat;
}
public void setFormat(String f){
mediaFormat = f;
}
public String toString(){
return number + ": " + movieTitle + " - " + category + " "
mediaFormat;

}
}
255

+


import java.sql.*;
public class MovieDatabase{
private Connection connection;
private PreparedStatement findByNumber, updateCategory;
private CallableStatement findByCategory;
public MovieDatabase(Connection connection) throws SQLException{
this.connection = connection;
}
public void showAllMovies(){
try{
Statement selectAll = connection.createStatement();
String sql = "SELECT * FROM Movies";
ResultSet results = selectAll.executeQuery(sql);
while(results.next()){
int number = results.getInt(1);
String title = results.getString("title");
String category = results.getString(3);
String format = results.getString(4);
Movie movie = new Movie(number, title, category, format);
System.out.println(movie.toString());
}
results.close();
selectAll.close();

}catch(SQLException e){
e.printStackTrace();
}
}
}
256


import java.sql.*;
public class ShowMovies{
public static void main(String [] args){
String url = "jdbc:odbc:" + args[0];
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection =DriverManager.getConnection(url);
MovieDatabase db = new MovieDatabase(connection);
db.showAllMovies();
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

6.6.3. Ví dụ cập nhật CSDL
Phương hứ
Mo e

ddMo e()


n dư

được thêm vào l p

se đã định nghĩa ở ví dụ trên.

public class MovieDatabase{

public void addMovie(Movie movie){
ys em ou p n n(“Add ng mo e: “ + mo e o

ng());

try{
Statement addMovie = connection.createStatement();
ng sq = “IN ERT INTO Mo es VA UE (“ +
mov e ge Num e () + “, “
+ “‘“ + mo e ge Mo eT e() + “‘, “ + “‘“ + mo e ge C ego y() +
“‘, “
257


+ “‘“ + mo e ge Fo m () + “‘)”;
ys em ou p n n(“E e u ng s

emen : “ + sq );

addMovie.executeUpdate(sql);
addMovie.close();
System.out p n n(“Mo e dded su essfu y!”);

}catch(SQLException e){
e.printStackTrace();
}
}
}

import java.sql.*;
public class AddMovies{
public static void main(String [] args){
ng u = “jd :od :” +

gs[0];

ys em ou p n n(“A emp ng o onne

o “ + u );

try{
ys em ou p n n(“ o d ng he d
C ss fo N me(“sun jd

od

ys em ou p n n(“Es

e

”);

d Od


sh ng

e ”);

onne

on ”);

Connection connection = DriverManager.getConnection(url);
System ou p n n(“Conne

o “ + onne

on ge C

og() + “

su ess!”);
MovieDatabase db = new MovieDatabase(connection);
Movie [] movies = new Movie[6];
mo es[0] = new Mo e(1, “
F

W s: A New Hope”,“

en e

on”, “ V ”);
movies[1] = new Mo e(2, “C zen


ne”, “

m ”, “VH ”);

mo es[2] = new Mo e(3, “The ung e ook”, “Ch d en”, “VH ”);
258


mo es[3] = new Mo e(4, “ um

nd um e ”, “Comedy”,

“ V ”);
mo es[4] = new Mo e(5, “


en e F

W s: A

k of he C ones”,

on”, “ V ”);
mo es[5] = new Mo e(6, “Toy

o y”, “Ch d en”, “ V ”);

for(int i = 0; i < movies.length; i++){
db.addMovie(movies[i]);

}
ys em ou p n n(“C os ng he onne
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

259

on ”);


i ập
Để x

được dữ li u từ mộ C

, hương ình

ph i thực hi n lần ượt theo các

ư c sau:
 Gọi hàm getConnection() để nhận đượ đ
 Tạo ra mộ đ

ượng c a l p Connection;

ượng c a l p Statement;


 Chuẩn bị mộ đ i ượng để x lý l nh c a SQL và truy vấn vào dữ li u theo yêu
cầu; Câu l nh SQL có thể thực hi n trực ti p hông qu đ
hoặc có thể được biên dịch dị h hông qu đ

ượng c a Statement

ượng c a PreparedStatement hay

gọi một th tụ để ưu ại thông qua CallableStatement.
Khi hàm executeQuery() được thực hi n, thì k t qu được cho lạ à đ
ResualtSet bao gồm các dòng dữ li u và có thể s dụng hàm next() để

ượng c a l p
định các dữ li u

theo yêu cầu.
Câu 1. Tạo ơ sở dữ li u đơn g n trong MS Access và SQL Server 2000 bao gồm 2 b ng
như s u:
SanPham(MaSP, TenSP, NhaSanXuat, MaLoaiSP)
LoaiSanPham(MaLoaiSP, TenLoaiSP)
Câu 2. Vi

hương ình ho phép h ển thị MaSP, TenSP và TenLoaiSP (trong

console và trong giao di n)
Câu 3. Cho phép nhập vào dữ li u vào b ng LoaiSP
Thư

n dùng để k t n i vào SQL Server gồm các file: msbase.jar, mssqlserver.jar,


msutil.jar.
ưu

ần kh

o hư

n ư c khi biên dịch.

Câu 4. Thi t k CSDL và vi

hương ình qu n í bán hàng hóa theo các mô t sau:

NHANVIEN: m i nhân viên có một mã nhân viên duy nhất, họ n, ngày h ng năm s nh,
địa chỉ s đ n thoại và gi i tính

260


SANPHAM: m i một s n phẩm có một mã s n phẩm để phân bi t v i s n phẩm khác,
một tên s n phẩm, đơn ị ính à g (đơn g > 0)
HOADON: m i một hóa đơn ó mộ mã hó đơn duy nhất, mã nhân viên lập hó đơn,
loạ hó đơn (nhập, xuất, chuyển hay tr ), ngày lập hó đơn, ngày g o nhận, diễn gi i
(ngày lập <= ngày hi n hành)
hó đơn ho

CHITIETHOADON: m i chi ti
hay tr c a mộ hó đơn nào
Câu 5. Vi


is

ượng, đơn g

t 1 s n phẩm được nhập, xuất, chuyển
n

hương ình ằng ngôn ngữ lập trình Java k t n i vào CSDL tạo trên.

Câu 6. Chương ình ho phép

h o

h m, ó , s a, xem dữ li u ở các b ng.

Câu 7. Thi t k form ở dạng master/detail hiển thị thông tin về hó đơn à h

t

hó đơn
Câu 8. h

được tạo bằng Access (SQL Server hay Oracle) bao gồm các bảng

sau:
TblTacGia
Tên cột

Mô tả


kiểu dữ liệu

MaTG

Mã tác gi

Varchar

TenTG

Tên tác gi

Varchar

DCLienHe

Địa chỉ liên h

Varchar

TblSach
Tên cột

Mô tả

kiểu dữ liệu

MaSach


Mã s sách

Varchar

TuSach

Tự đề sách

Varchar

SoTrang

S trang

Smallint

MaTG

Mã tác gi

Varchar

NamXB

Năm uất b n

Int

TuKhoa


Từ khóa mô t sách Varchar

NXB

Nhà xuất b n

Varchar
261


TblChiTietSach
Tên cột

Mô tả

kiểu dữ liệu

MaSach

Mã s sách

Varchar

MaCaBiet

Tự đề sách

Varchar

TinhTrangSach


Tình trạng sách

tinyint

TinhTrangPhucVu Tình trạng phục vụ

tinyint

TblSachTG
Tên cột

Mô tả

kiểu dữ liệu

MaSach

Mã s sách

Varchar

MaTG

Mã tác gi

Varchar

TblDocGia
Tên cột


Mô tả

kiểu dữ liệu

SoThe

Mã s thẻ

Varchar

HoTen

Họ n độc gi

Varchar

DVCT

Đơn ị công tác

Varchar

TblSachMuon
Tên cột

Mô tả

kiểu dữ liệu


SoThe

Mã s thẻ

Varchar

MaCaBiet

Mã s cá bi t c a sách

Varchar

NgayMuon

Ngày mượn sách

Datetime

NgayPhaiTra

Ngày ph i sách

Datetime

NgayTra

Ngày tr sách

Datetime


Hãy vi

hương ình j

:

262


đ n CSDL nói trên bằng c hai cách:

Câu 9. S dụng cầu n i JDBC-ODBC k t n
s dụng DNS và File DNS
Câu 10. S dụng đ

ượng

emen để tạo ra các b ng trên

Câu 11. Chèn một s mẫu tin vào các b ng
Câu 12. Lấy về tất c các mẫu tin c a b ng sách và in ra màn hình
Câu 13. Vi

hương ình ó g o d n đồ họa cho phép xem các mẫu tin c a b ng

Câu 14. Vi

hương ình ìm k m các cu n sách theo một s

sách


Câu 15. Cho CSDL gồm các b ng sau:
SinhVien(MaSV, HoTen, DiaChi, Lop)
HocVi(MaHV, TenHV)
DeTai(MaDT, TenDT)
SinhVien_DeTai(MaSV, MaDT)
GiaoVien_DeTai(MaGV, MaDT)
GiaoVien(MaGV, HoTen, DiaChi, MaHV)
KetQua(MaSv, MaDT, Diem)
Ý n hĩ củ c c

ườn
iế ắ

Ý n hĩ

Masv

Mã sinh viên

HoTen

Họ và tên

MaDT

Mã đề tài

MaGV


Mã giáo viên

Diem

Đ ểm b o v

DiaChi

Địa chỉ

MaHV

Mã s học vị

TenHV

Tên học vị

Ý n hĩ củ c c bản
 SinhVien: B ng ưu d nh s h s nh

n
263

u hí nào đó


 DeTai: B ng ưu d nh s h

đề tài


 KetQua: B ng ưu d nh k t qu b o v c

đề tài

 G oV en: ưu d nh mục các giáo viên


nhV en_ eT : ưu

đề tài mà sinh viên thực hi n

 G oV en_ eT : ưu

đề à mà s nh mà g o

n hư ng dẫn

 Ho V : ưu học danh mục các học vị
cq

n hệ
Bảng cha

Bảng con

Kiểu quan hệ

SinhVien


SinhVien_DeTai

1-n

DeTai

SinhVien_DeTai

1-n

GiaoVien

GiaoVien_DeTai

1-n

SinhVien

KetQua

1-1

DeTai

KetQua

1-1

GiaoVien


HocVi

1-1

Ý n hĩ củ c c q

n hệ

Một sinh viên có thể không tham gia hoặc tham gia nhiều đề tài
Một giáo viên có thể không hư ng dẫn hoặ hư ng dẫn nhiều đề tài
M i sinh viên b o v đề tài có một k t qu riêng bi t
M i giáo viên chỉ có một học vị.
hương ình j

Hãy vi

hực hi n các yêu cầu sau:

Câu 16. S dụng ình điều khiển cho SQL Server c

M

osof để k t n i vào

Sql Server
Câu 17. S dụng đ

ượng

emen để tạo các b ng trên và các quan h giữa


chúng
Câu 18. Vi t một ứng dụng có giao di n đồ họa và s
P ep ed

eme để nhập một s mẫu tin vào các b ng

Vi t các th tụ ưu ữ sau:

264

dụng đ

ượng


Câu 19. Vi t th tụ ưu ữ có tham s là xâu ký tự, th tục này sẽ tr về đề tài có

s nh

o ương ứng tham s c a th tụ đề à đó,
n h mg , ng o

hông n gồm: T n đề tài, tên

n hư ng dẫn

Câu 20. Vi t th tụ ưu ữ có tham s là một s nguyên, th tục này sẽ tr về các
sinh viên có k t qu b o v đề tài nhỏ hơn g
Câu 21. Vi t th tụ

ượng

ưu ữ có tham s là một xâu kí tự, th tục này sẽ tr về s

đề à hư ng dẫn c a giáo viên có mã bằng tham s c a th tục.

Câu 22. Vi t th tụ
ượng

ị c a tham s c a th tục.

s nh

ưu ữ có tham s là một xâu kí tự, th tục này sẽ tr về s

n h m g đề tài có mã bằng tham s c a th tục.

Câu 23. Hãy thêm cột XepLoai vào b ng KetQua và vi t th tụ
nhập x p loại cho cột x p loại theo công thức:
Diem<5: Y u
Diem>=5 và Diem<7 : Trung bình
Diem>=7 và Diem<8: Khá
Diem>8: Giỏi

265

ưu ữ để để cập


[1] Nguyễn Phương


n (2005), Java T p 1,2, Nhà xuất b n

o động – Xã hội.

[2] Richard F. Raposa. Java in 60 Minutes a Day. Published by Wiley Publishing, Inc.,
Indianapolis, Indiana, 2003.

266


×