Tải bản đầy đủ
Phần 3: Kết nối MySql bằng Java

Phần 3: Kết nối MySql bằng Java

Tải bản đầy đủ

Tôi có chụp cấu trúc thư mục Project này như sau:

Mô hình class: Ở đây tôi tách làm 3 package để cho dễ quản lý.
– package Connector bao gồm các class kết nối và tương tác với các hệ cơ sở dữ liệu
– package Model dùng để mô hình hóa bảng dữ liệu thành các đối tượng.
– package UI cung cấp giao diện cho người sử dụng để tương tác với dữ liệu.
Mô hình của package Connector:

5

Mô hình của package Model:

Mô hình của package UI:

6

Cơ sở dữ liệu mẫu, ở đây Tôi làm 2 bảng lophoc và sinhvien ( các bạn chú ý là kiểu
dữ liệu và kích thước là tương ứng cho cả 3 hệ cơ sở dữ liệu: Ms access, MySql và
SqlServer…). Tôi muốn Demo sơ sơ chương trình quản lý sinh viên – lớp học.
Các bạn xem mô tả:

7

Trên đây là Tôi dùng Ms Access. Tương tự bạn làm cho Mysql, SqlServer. Có thể
các bạn chưa thao tác với MySql bao giờ, Tôi sẽ hướng dẫn cách bạn download, cài
đặt, cấu hình, sử dụng MySql Workbrench ở phần kế tiếp. Hiện tại bây giờ các bạn
theo dõi Tôi hướng dẫn MS Access
Giao diện chính của chương trình như sau:

8

Tương ứng với mỗi nút lệnh “MS Access”, “SQL Server” , “My Sql” thì chương
trình của chúng ta sẽ kết nối tới các hệ cơ sở dữ liệu đó.
Tôi sẽ giải thích chi tiết cách kết nối, cách tương tác với dữ liệu: Lấy dữ liệu, thêm,
sửa, xóa, xử lý thống kê (in ấn dữ liệu)
Topic tương đối dài nên Tôi sẽ chia ra từng loại hệ cơ sở dữ liệu khác nhau. Chỉ cần
các bạn cố gắng hiểu được cách tương tác tới 1 hệ cơ sở dữ liệu nào đó thì các hệ
khác cũng tương tự, vấn đề chỉ nằm ở Logic lập trình của các bạn.
– Trong trường hợp kết nối tới MS Access, khi các bạn click chuột vào “Ms Access”
thì sẽ có giao diện bên dưới:

9

Các bạn chú ý rằng. Giao diện trên được làm hết trong class AbstractConnectUI, Kể
cả việc hiển thị dữ liệu.
Các bạn nhớ rằng. Vì chúng ta đang cố gắng tương tác với các hệ cơ sở dữ liệu khác
nhau, tức là chỉ khác nhau ở nơi lưu trữ dữ liệu, còn giao diện và các nghiệp vụ thì
hoàn toàn giống nhau.
Như vậy ứng với Ms Access thì trong ConnectMsAccessUI, bạn sẽ gọi các class
Connector liên quan tới Ms Accesss.
hoặc là ứng với MySQL thì trong ConnectMySqlUI, bạn sẽ gọi các clsss Connector
liên quan tới MySQL
Tức là chúng ta chỉ làm GIAO DIỆN 1 lần mà thôi, tùy vào việc sử dụng hệ cơ sở
dữ liệu nào mà ta thay đổi hành vi khác nhau.
Các bạn phải rành về lập trình hướng đối tượng, tính kế thừa, tính đa hình thì việc
tiếp thu sẽ nhanh chóng hơn.

10

Tôi đính kèm coding dưới này để các bạn tham khảo, Nếu như các bạn hiểu cách lấy
dữ liệu từ Access rồi thì MySQl, SQL Server cũng sẽ tương tự. Topic này chỉ dừng
lại ở việc truy suất dữ liệu. Trong ConnectMySqlUI, ConnectSqlServerUI Tôi cũng
đã viết sẵn Code để truy vấn tới dữ liệu. Nếu bạn nào khá về Logic thì cố gắng đưa
lên giao diện như trong Access, vài ngày nữa Tôi sẽ làm tiếp phần: Thêm, Sửa, Xóa,
In ấn.
============================================================
=====
Package: tranduythanh.com.connector
============================================================
=====
class CConnector

package tranduythanh.com.connector;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public abstract class CConnector
{
protected Connection m_Connection=null;
/**Hàm này dùng để kết nối tới các hệ cơ sở dữ liệu
* Tùy vào từng Hệ CSDL mà chúng ta coding khác nhau ở các lớp kế thừa từ nó
*/
public abstract Connection getConnect(String strServer,String strDatabase,String
strUser,String strPwd);
/** Hàm này dùng để truy vấn dữ liệu,

11

* Connection con: đối tượng connnection
* String strSql: câu truy vấn
* Trả về ResultSet
*/
public ResultSet execQuery(Connection con,String strSql)
{
ResultSet rs=null;
try
{
Statement st=con.createStatement();
rs =st.executeQuery(strSql);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return rs;
}
/** Hàm này dùng để truy vấn dữ liệu,
* String strSql: câu truy vấn
* Trả về ResultSet

12

*/
public ResultSet execQuery(String strSql)
{
ResultSet rs=null;
try
{
Statement st=m_Connection.createStatement();
rs =st.executeQuery(strSql);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return rs;
}
/** Hàm này dùng cập nhật dữ liệu,
* Connection con: đối tượng connnection
* String strSql: câu truy vấn
* Nếu cập nhật thành công thì kết quả >0
*/
public int execNoneQuery(Connection con,String strSql)

13

{
int rec=0;
try
{
Statement st=con.createStatement();
rec=st.executeUpdate(strSql);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return rec;
}
/** Hàm này dùng cập nhật dữ liệu,
* String strSql: câu truy vấn
* Nếu cập nhật thành công thì kết quả >0
*/
public int execNoneQuery(String strSql)
{
int rec=0;
try

14

{
Statement st=m_Connection.createStatement();
rec=st.executeUpdate(strSql);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return rec;
}
/** Hàm này dùng đóng kết nối,
* Connection con: đối tượng connnection
*/
public void close(Connection con)
{
try
{
if(con!=null)
con.close();
}
catch(SQLException ex)

15