ắ Tỡm hiểu hiện trạng truy xuất chuỗi Unicode trong SQL Server từ JAVA và PHP:
Hai phương pháp JDBC và ODBC đều làm tốt công việc của mình là truy xuất cơ sở dữ liệu trong SQL Server. Do càng về sau JAVA càng hỗ trợ tốt cho việc truy xuất bảng dữ liệu, nên Unicode cũng không phải là 1 ngoại lệ.
Các bản JAVA về sau việc truy xuất UNICODE như là 1 mặc định.
Trong SQL Server việc support UNICODE là 1 trong nhũng điều mặc định, nên ngôn ngữ JAVA cũng thế… vì JAVA là ngôn ngữ mở nên việc truy xuất chuỗi UNICODE rất thông dụng và được phát triển rất tốt.
Qua nhiều năm, với nhũng cải tiến đáng kể cho ngôn ngữ JAVA, việc truy xuất UNICODE trong SQL Server rất dễ dàng… hầu như ngừoi dùng không phải thêm bớt bất kì câu lệnh nào mà chương trình vẫn hoạt động tốt.
Hiện thực DEMO giải pháp:
Em đã dùng chương trinh Eclipse để hiện thực Demo.
Em đã tạo ra 1 dialog trong đó chứa các JTextField , gồm các text chứa họ và tên sinh viên, địa chỉ sinh viên, mã số sinh viên (ID) và các nút Jbutton.
Giải thích ý nghĩa từng JtextField:
• JtextFieldID dùng để chứa Mã số ID của Sinh Viên.
• JtextFieldHoVaTen dùng để chứa Họ và Tên của Sinh viên.
• JTextFielĐịaChỉ dùng để chứa Địa chỉ của Sinh Viên.
• JtextFielđSoDienThoai dùng để chứa số điện thoại của Sinh Viên.
• JtextFieldTuoi dùng để chứa tuổi của Sinh Viên.
Chi tiết thiết kế từng JtextField:
• JtextFieldID:
private JTextField IDTextField = null;
private JTextField getIDTextField() { if (IDTextField == null) {
IDTextField = new JTextField();
IDTextField.setBounds(new java.awt.Rectangle(147,15,195,33));
}
return IDTextField;
}
Ý nghĩa những câu lệnh :
- IDTextField = new JtextField()
+ dùng để khởi tạo 1 textField mới
- IDTextField.setBounds(new java.awt.Rectangle(147,15,195,33));
+ dùng để xác định vị trí sẽ đặt TextField này.
• JtextFieldHoVaTen:
private JTextField HotenTextField = null;
private JTextField getHotenTextField() { if (HotenTextField == null) {
HotenTextField = new JTextField();
HotenTextField.setBounds(new java.awt.Rectangle(148,60,199,33));
}
return HotenTextField;
}
Ý nghĩa những câu lệnh :
- HotenTextField = new JTextField();
+ dùng để khởi tạo 1 textField mới
- HotenTextField.setBounds(new java.awt.Rectangle(148,60,199,33));
+ dùng để xác định vị trí sẽ đặt TextField này.
• JtextFieldDiaChi:
private JTextField DiachiTextField = null;
private JTextField getDiachiTextField() { if (DiachiTextField == null) {
DiachiTextField = new JTextField();
DiachiTextField.setBounds(new java.awt.Rectangle(149,107,199,35));
}
return DiachiTextField;
}
Ý nghĩa những câu lệnh :
- DiachiTextField = new JTextField();
+ dùng để khởi tạo 1 textField mới - DiachiTextField.setBounds(new
java.awt.Rectangle(149,107,199,35));
+ dùng để xác định vị trí sẽ đặt TextField này.
• JtextFieldSoDienThoai:
private JtextField SoDTTextField = null;
private JtextField getSoDTTextField() { if (SoDTTextField == null) {
SoDTTextField = new JtextField();
SoDTTextField.setBounds(new java.awt.Rectangle(150,151,196,33));
}
return SoDTTextField;
}
Ý nghĩa những câu lệnh :
- SoDTTextField = new JtextField();
+ dùng để khởi tạo 1 textField mới - SoDTTextField.setBounds(new
java.awt.Rectangle(150,151,196,33));
+ dùng để xác định vị trí sẽ đặt TextField này.
• JtextFieldTuoi:
private JTextField tuoiTextField = null;
private JTextField getTuoiTextField() { if (tuoiTextField == null) {
tuoiTextField = new JTextField();
tuoiTextField.setBounds(new java.awt.Rectangle(150,194,195,34));
}
return tuoiTextField;
}
Ý nghĩa những câu lệnh :
- tuoiTextField = new JTextField();
+ dùng để khởi tạo 1 textField mới - tuoiTextField.setBounds(new
java.awt.Rectangle(150,194,195,34));
+ dùng để xác định vị trí sẽ đặt TextField này.
Giải thích ý nghĩa từng Jbutton:
- JbuttonAdd dùng để thêm dữ liệu vào trong bảng - JbuttonNext dùng để xem tới dữ liệu trong bảng - JbuttonPrevious dùng để xem lùi dữ liệu trong bảng Chi tiết thiết kế từng Jbutton:
• AddButton :
private JButton AddButton = null;
private JButton getAddButton() { if (AddButton == null) {
AddButton = new JButton();
AddButton.setBounds(new java.awt.Rectangle(13,258,98,42));
AddButton.setText(" Add");
AddButton.addActionListener(new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
try{
System.out.print("Complete");
st.execute("insert into Sinhvien(ID,Hoten,DiaChi,SoDT,Tuoi) values
('"+IDTextField.getText()+"','"+HotenTextField.getText()+"','"+DiachiTextField.ge tText()+"','"+SoDTTextField.getText()+"','"+tuoiTextField.getText()+"')");
}
catch (SQLException ex)
{
ex.printStackTrace();
} }
});
}
return AddButton;
}
Ý nghĩa những câu lệnh : - AddButton = new JButton();
Tạo mới 1 đối tương Jbutton.
- AddButton.setBounds(new java.awt.Rectangle(13,258,98,42));
Thiết lập vị trí nút Jbutton.
- AddButton.setText(" Add");
Đặt nhãn tên cho nút Jbutton.
- AddButton.addActionListener(new java.awt.event.ActionListener()
Tạo 1 đối tượng lắng nghe sự kiện click chuột của người dùng cho nút Jbutton.
- st.execute("insert into Sinhvien(ID,Hoten,DiaChi,SoDT,Tuoi) values ('"+IDTextField.getText()+"','"+HotenTextField.getText()+"','"+DiachiTextFi eld.getText()+"','"+SoDTTextField.getText()+"','"+tuoiTextField.getText()+"' )"); Lấy giá trị trong bảng để in lên các TextField.
- catch (SQLException ex) { ex.printStackTrace(); } Bắt lỗi sự kiên cho nút Jbutton.
• NextButton :
private JButton getNextButton = null;
private JButton getNextButton() { if (NextButton == null) {
NextButton = new JButton();
NextButton.setBounds(new java.awt.Rectangle(134,255,96,43));
NextButton.setText("Next");
NextButton.addActionListener(new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()");
// TODO Auto-generated Event stub actionPerformed()
try{
IDTextField.setText(rs.getString(1));
HotenTextField.setText(rs.getString(2));
DiachiTextField.setText(rs.getString(3));
SoDTTextField.setText(rs.getString(4));
tuoiTextField.setText(rs.getString(5));
System.out.println("Next");
}
catch(Exception e3)
{
System.out.println("Not found");
} }
});
}
return NextButton;
}
Ý nghĩa những câu lệnh : - NextButton = new JButton();
Tạo mới 1 đối tương Jbutton.
- NextButton.setBounds(new java.awt.Rectangle(134,255,96,43));
Thiết lập vị trí nút Jbutton.
- NextButton.setText("Next");
Thiết lâp label cho nút Jbutton.
- NextButton.addActionListener(new java.awt.event.ActionListener()
Tạo 1 đối tượng lắng nghe sự kiện click chuột của người dùng cho nút Jbutton.
- IDTextField.setText(rs.getString(1));
Lấy chuỗi dữ liệu trong dòng ID.
- HotenTextField.setText(rs.getString(2));
Lấy chuỗi dữ liệu trong dòng Họ tên - DiachiTextField.setText(rs.getString(3));
Lấy chuỗi dữ liệu trong dòng Địa chỉ.
- SoDTTextField.setText(rs.getString(4));
Lấy chuỗi dữ liệu trong dòng số điện thoại - tuoiTextField.setText(rs.getString(5));
Lấy chuỗi dữ liệu trong dòng tuổi.
• PreviousButton : private JButton PreviousButton = null;
private JButton getPreviousButton() { if (PreviousButton == null) {
PreviousButton = new JButton();
PreviousButton.setBounds(new java.awt.Rectangle(255,252,93,47));
PreviousButton.setText("Previous");
PreviousButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()");
try{
IDTextField.setText(rs.getString(1));
HotenTextField.setText(rs.getString(2));
DiachiTextField.setText(rs.getString(3));
SoDTTextField.setText(rs.getString(4));
tuoiTextField.setText(rs.getString(5));
System.out.println("Back");
} catch(Exception e3) {
System.out.println("Ko co du lieu");
} }
});
}
return PreviousButton;
}
Ý nghĩa những câu lệnh :
- PreviousButton = new JButton();
Tạo mới 1 đối tương Jbutton.
- PreviousButton.setBounds(new java.awt.Rectangle(255,252,93,47));
Thiết lập vị trí nút Jbutton.
- PreviousButton.setText("Previous");
Thiết lập Label cho Jbutton.
- PreviousButton.addActionListener(new java.awt.event.ActionListener() Tạo 1 đối tượng lắng nghe sự kiện click chuột của người dùng cho nút Jbutton.
- IDTextField.setText(rs.getString(1));
Lấy chuỗi dữ liệu trong dòng ID.
- HotenTextField.setText(rs.getString(2));
Lấy chuỗi dữ liệu trong dòng họ và tên.
- DiachiTextField.setText(rs.getString(3));
Lấy chuỗi dữ liệu trong dòng địa chỉ.
- SoDTTextField.setText(rs.getString(4));
Lấy chuỗi dữ liệu trong dòng số điện thoại - tuoiTextField.setText(rs.getString(5));
Lấy chuỗi dữ liệu trong dòng tuổi Hình ảnh minh hoạ kết quả đạt được:
ắ Tỡm hiểu hiện trạng truy xuất chuỗi Unicode trong SQL Server từ PHP:
Tổng quan: PHP sử dụng Unicode mã hóa theo phương thức UTF-8. Còn SQL Server 2000 lại sử dụng phương thức mã hóa khác là UCS-2 và không nhận diện UTF-8 như là các ký tự dữ liệu hợp lệ.
Để có thể sử dụng Unicode, ta phải khai báo charset của trang web là Utf-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Và khi nhập dữ liệu vào trong SQL Server, phải thêm vào tiền tố N trước chuỗi cần nhập để MS SQL nhận biết được đó là chuỗi dạng Unicode
Ví dụ:
$query = "INSERT INTO LoginTable VALUES(N'$idname',N'$fullname',N'$password')";
$resuslt = mssql_query($query);