Tải bản đầy đủ (.docx) (59 trang)

Lập trình java phần 2

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 (485.66 KB, 59 trang )

Lập Trình Java 2
Trong ví dụ này Tôi muốn demo cho các bạn các thuật toán sắp xếp bằng ngôn ngữ
Java
Nếu như không dùng đa tiến trình thì giao diện của bạn sẽ bị “Đơ”
Source code: />
File Jar để chạy: />
Ở đây Tôi đã làm xong thuật toán Bubble Sort, các thuật toán khác Tôi viết sẵn hàm,
các bạn bắt chước Tôi làm để sửa lại cho đúng thuật toán sắp xếp khác.
Hình minh hoạ thuật toán đang tiến hành :

Hình minh họa đã hoàn thành thuật toán:


Các thuật toán Tôi đang để trống là:
public synchronized void doSelectionSort()
{
}
public synchronized void doInsertionSort()
{
}
public synchronized void doQuickSort()
{
}
Các bạn viết code trong này, việc xử lý khi người sử dụng chọn kiểu sắp xếp Tôi đã
làm trong MyNumberFrame
Good luck!

2


Chia sẻ lên:







inShare




Print


Posted in: Lập Trình Java 2

Phần 1 – Kết nối các hệ cơ sở dữ liệu bằng Java
By Trần Duy Thanh on March 28, 2012 | 14 Comments

4 Votes

Yêu cầu: 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ì mới hiểu được các phần hướng dẫn bên dưới. Tức là bạn phải khá về lập trình
Java 1, nếu đọc mà vẫn không hiểu thì có thể email
tới Tôi sẽ giải thích những phần các bạn chưa hiểu.
——————————————————————————————————
—————

3



Phần 1: Kết nối Microsoft Access bằng Java
Phần 2: Kết nối Microsoft SQL Server 2008 bằng Java
Phần 3: Kết nối MySql bằng Java
——————————————————————————————————
—————
Topic này Tôi muốn hướng dẫn các bạn cách kết nối tới nhiều cơ sở dữ liệu khác
nhau bằng ngôn ngữ lập trình Java
Các bạn sẽ được học đầy đủ trong môn Lập Trình Java 2.
Trong Topic này Tôi đặt ra một trường hợp là: Chúng ta có nhiều hệ cơ sở dữ liệu
khác nhau ví dụ như Ms Access, SqlServer, MySQL… làm cách nào để viết các
class Java thành các thư viện để kết nối tới các hệ cơ sở dữ liệu này?
Có rất nhiều mô hình, ở đây Tôi chỉ nhấn mạnh vào cách viết class để kết nối tới các
CSDL mà thôi (không đề cập mô hình nào cả). Khi bạn rành rồi thì có thể sử dụng
ORM hibernate để coding hoặc bất cứ loại nào. Nhưng trước tiên các bạn phải biết
những kỹ thuật căn bản trước đã.
——————————————————————————————————
————————————

Phần 1: Kết nối Microsoft Access bằng Java
Nếu bạn sử dụng MS Access 2003(đuôi là .mdb) thì không phải cài đặt thêm Driver
Còn nếu như bạn sử dụng MS Access 2007, 20120 (đuôi là .accdb) thì các bạn cài
đặt thêm:
2007 Office System Driver: Data Connectivity Components :
/>Những class nào bạn cần quan tâm trong phần 1 này:
Trong Connector bạn quan tâm tới classs CMsAccessConnector
Trong UI bạn quan tâm tới ConnectMsAccessUI

4



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


{
ex.printStackTrace();
}
}
/** Hàm này dùng đóng kết nối,
*/
public void close()
{
try
{
if(m_Connection!=null)
m_Connection.close();
}
catch(SQLException ex)
{

ex.printStackTrace();
}
}
}

class CMsAccessConnector

package tranduythanh.com.connector;import java.sql.Connection;
16


import java.sql.DriverManager;
public class CMsAccessConnector extends CConnector
{
/**
* Hàm dùng để kết nối tới MS Access
* strDatabase: tên CSDL
* Trả về Connection
**/
public Connection getConnect(String strServer,String strDatabase,String strUser,String
strPwd)
{
try
{
String strConnect=”jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,
*.accdb)};DBQ=”+strDatabase;
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
m_Connection= DriverManager.getConnection(strConnect);
}
catch(Exception e)

{
e.printStackTrace();

17


}
return m_Connection;
}
}

class CMySqlConnector

package tranduythanh.com.connector;import java.sql.Connection;import java.sql.SQLExc
eption;importjava.util.Properties;
import com.mysql.jdbc.Driver;
public class CMySqlConnector extends CConnector
{
/**
* Hàm dùng để kết nối tới MySQL
* strDatabase: tên CSDL
* Trả về Connection
**/
public Connection getConnect(String strServer,String strDatabase,String strUser,String strPwd)
{
String strConnect=”jdbc:mysql://”+strServer+”/”+strDatabase;
Properties pro=new Properties();
pro.put(“user”, strUser);
pro.put(“password”, strPwd);


18


try
{
com.mysql.jdbc.Driver driver=new Driver();
m_Connection=driver.connect(strConnect, pro);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
return m_Connection;
}
}

class CSqlServerConnector

package tranduythanh.com.connector;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CSqlServerConnector extends CConnector
{
/**
* Hàm dùng để kết nối tới SQL Server

19


* strDatabase: tên CSDL

* Trả về Connection
**/
public Connection getConnect(String strServer,String strDatabase,String strUser,String
strPwd)
{
try {
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
String connectionUrl = “jdbc:sqlserver://”+strServer+”;” +
“databaseName=”+strDatabase+”;user=”+strUser+”;password=”+strPwd+”;”;
System.out.println(“Successful”);
m_Connection= DriverManager.getConnection(connectionUrl);
System.out.println(“Successful”);
} catch (SQLException e) {
System.out.println(“SQL Exception: “+ e.toString());
} catch (ClassNotFoundException cE) {
System.out.println(“Class Not Found Exception: “+ cE.toString());
}
return m_Connection;
}
}

20


============================================================
=====
Package: tranduythanh.com.model
============================================================
=====
class Lophoc


package tranduythanh.com.model;import java.util.ArrayList;
public class Lophoc {
private String malop;
private String tenlop;
private int siso;
private ArrayList<Sinhvien> list=new ArrayList<Sinhvien>();
/**
* @return the list
*/
public ArrayList<Sinhvien> getList() {
return list;
}
public boolean addSinhvien(Sinhvien sv)
{
return list.add(sv);
}

21


public Sinhvien findSinhvienById(String masinhvien)
{
for(Sinhvien s: list)
{
if(s.getMasinhvien().equalsIgnoreCase(masinhvien))
return s;
}
return null;
}

public void removeSinhvien(String masinhvien)
{
Sinhvien sv=findSinhvienById(masinhvien);
list.remove(sv);
}
/**
* @param list the list to set
*/
public void setList(ArrayList<Sinhvien> list) {
this.list = list;
}
public Lophoc(String malop, String tenlop, int siso) {

22


super();
this.malop = malop;
this.tenlop = tenlop;
this.siso = siso;
}
public Lophoc() {
super();
}
/**
* @return the malop
*/
public String getMalop() {
return malop;
}

/**
* @param malop the malop to set
*/
public void setMalop(String malop) {
this.malop = malop;
}
/**

23


* @return the tenlop
*/
public String getTenlop() {
return tenlop;
}
/**
* @param tenlop the tenlop to set
*/
public void setTenlop(String tenlop) {
this.tenlop = tenlop;
}
/**
* @return the siso
*/
public int getSiso() {
return siso;
}
/**
* @param siso the siso to set

*/
public void setSiso(int siso) {

24


this.siso = siso;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.tenlop +” (“+this.siso+”)”;
}
}

class Sinhvien

package tranduythanh.com.model;import java.sql.Date;
public class Sinhvien {
private String masinhvien;
private String malop;
private String hoten;
private Date namsinh;
private String diachi;
/**
* @return the masinhvien
*/
public String getMasinhvien() {

25



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×