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
hư
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
ơ
hư
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
và
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
là
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ó
mã
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