Lập trình cơ sở dữ liệu trong Java
10MAY
Database programming trong java
1.1 JDBC driver và connection database
a. JDBC
JDBC (Java Database Connectivity, java.sql.*) là một thư viện chuẩn dùng để truy cập dữ liệu quan hệ từ ứng dụng bằng ngôn ngữ truy vấn sql, một vài hệ cơ sở dữ liệu phổ biến như như Access, MS SQL, Oracle, …
JDBC hỗ trợ 4 loại (kiểu) truy cập dữ liệu trong DBMS như sau:
1. Loại I – JDBC-ODBC Bridge
Chuyển các lời gọi JDBC thành ODBC, sau đó ODBC sẽ truy xuất các giao thức DBMS. Với cách này đòi hỏi máy tính phải cài trình điều khiển ODBC (ODBC driver manager)
2. Loại II – Partly Java Partly Native
Chuyển trực tiếp lời gọi JDBC thành giao thức truy xuất DBMS tại máy ứng dụng (client). Tuy nhiên trên máy client cần cài đặt thêm một vài mã nhị phân nào đó.
3. Loại III – Network Protocol Driver
Chuyển lời gọi JDBC thành các giao thức mạng độc lập nào đó. Sau đó phải dùng một phần mềm khác đặt trên máy database server và phần mềm đó sẽ chuyển các giao thức mạng thành giao thức truy xuất DBMS
4. Loại IV – Pure Java Driver
Chuyển trực tiếp lời gọi JDBC thành giao thức truy xuất DBMS trên máy server và máy client không phải cài đặt như ở loại 2.
1.1 JDBC driver và connection database
a. JDBC
JDBC (Java Database Connectivity, java.sql.*) là một thư viện chuẩn dùng để truy cập dữ liệu quan hệ từ ứng dụng bằng ngôn ngữ truy vấn sql, một vài hệ cơ sở dữ liệu phổ biến như như Access, MS SQL, Oracle, …
JDBC hỗ trợ 4 loại (kiểu) truy cập dữ liệu trong DBMS như sau:
1. Loại I – JDBC-ODBC Bridge
Chuyển các lời gọi JDBC thành ODBC, sau đó ODBC sẽ truy xuất các giao thức DBMS. Với cách này đòi hỏi máy tính phải cài trình điều khiển ODBC (ODBC driver manager)
2. Loại II – Partly Java Partly Native
Chuyển trực tiếp lời gọi JDBC thành giao thức truy xuất DBMS tại máy ứng dụng (client). Tuy nhiên trên máy client cần cài đặt thêm một vài mã nhị phân nào đó.
3. Loại III – Network Protocol Driver
Chuyển lời gọi JDBC thành các giao thức mạng độc lập nào đó. Sau đó phải dùng một phần mềm khác đặt trên máy database server và phần mềm đó sẽ chuyển các giao thức mạng thành giao thức truy xuất DBMS
4. Loại IV – Pure Java Driver
Chuyển trực tiếp lời gọi JDBC thành giao thức truy xuất DBMS trên máy server và máy client không phải cài đặt như ở loại 2.
JDBC gồm 2 phần chính là JDBC API và JDBC Driver Manager
b. Các bước kết nối database
1. Nạp jdbc driver
2. Tạo kết nối
3. Tạo câu lệnh sql và thực thi chúng
4. Xử lý kết quả nhận được
5. Đóng kết nối
Bây giờ chúng ta sẽ xem xét chi tiết các bước kết nối
1. Nạp jdbc driver
Sử dụng phương thức tĩnh
public static Class forName(String className)
throws ClassNotFoundException
với tham số là tên trình điều khiển cơ sở dữ liệu
Ví dụ:
Trình điều khiển của MSSQL:
o Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
Trình điều khiển của MySQL:
o Class.forName(“org.gjt.mm.mysql.Driver”);
Trình điều khiển của Oracle:
o Class.forName(“oracle.jdbc.driver.OracleDriver”);
Trình điều khiển của Sybase:
o Class.forName(“com.sybase.jdbc.SybDriver”);
Trình điều khiển qua cầu nối ODBC:
o Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
1. Nạp jdbc driver
2. Tạo kết nối
3. Tạo câu lệnh sql và thực thi chúng
4. Xử lý kết quả nhận được
5. Đóng kết nối
Bây giờ chúng ta sẽ xem xét chi tiết các bước kết nối
1. Nạp jdbc driver
Sử dụng phương thức tĩnh
public static Class forName(String className)
throws ClassNotFoundException
với tham số là tên trình điều khiển cơ sở dữ liệu
Ví dụ:
Trình điều khiển của MSSQL:
o Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
Trình điều khiển của MySQL:
o Class.forName(“org.gjt.mm.mysql.Driver”);
Trình điều khiển của Oracle:
o Class.forName(“oracle.jdbc.driver.OracleDriver”);
Trình điều khiển của Sybase:
o Class.forName(“com.sybase.jdbc.SybDriver”);
Trình điều khiển qua cầu nối ODBC:
o Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Note: Nếu chúng ta có sử dụng tới OBBC, thì đầu tiên phải tạo nguồn ODBC cho ứng dụng.
Ví dụ trên windows (Access database), Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC)
Ví dụ trên windows (Access database), Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC)
Đối với MySQL, bạn phải tải một gói driver có tên MySQL Connector J JDBC driver về từhttp://dev.mysql.com/downloads/ . Giải nén sau đó add tập tin .jar vào project, ví dụ trên Eclipse như sau:
2. Định nghĩa chuỗi kết nối và tạo kết nối
Đầu tiên chúng ta sẽ phải định nghĩa một chuỗi kết nối, mỗi trình điều khiển sẽ có một chuỗi kết nỗi khác nhau, một vài định dạng như:
• jdbc:odbc:dsn_name;UID=your_uid;PWD=your_pwd – JDBC-ODBC Bridge Driver URL.
• jdbc:oracle:thin:@machine_name:port_number:instance_name – Orace Type 4 JDBC Driver.
• jdbc:mysql://host_name:port/dbname – MySQL Connector/J JDBC Driver.
• jdbc:microsoft:sqlserver://host_name:port – MSSQL
Đầu tiên chúng ta sẽ phải định nghĩa một chuỗi kết nối, mỗi trình điều khiển sẽ có một chuỗi kết nỗi khác nhau, một vài định dạng như:
• jdbc:odbc:dsn_name;UID=your_uid;PWD=your_pwd – JDBC-ODBC Bridge Driver URL.
• jdbc:oracle:thin:@machine_name:port_number:instance_name – Orace Type 4 JDBC Driver.
• jdbc:mysql://host_name:port/dbname – MySQL Connector/J JDBC Driver.
• jdbc:microsoft:sqlserver://host_name:port – MSSQL
Để tạo kết nối ta gọi phương thức tĩnh getConnection() của lớp DriverManager, khi đó trả về một thể hiện của lớp Connection, theo dạng như sau:
String user = “root”
String password = “kien0985”
String dbUrl = “jdbc:mysql://localhost:3306/musiccds”;
Connection con = DriverManager.getConnection(dbUrl, username, password);
String user = “root”
String password = “kien0985”
String dbUrl = “jdbc:mysql://localhost:3306/musiccds”;
Connection con = DriverManager.getConnection(dbUrl, username, password);
3. Tạo câu lệnh sql và thực thi chúng
Dùng đối tượng Statement để thực thi một cấu lệnh sql, chúng ta có thể chọn lựa khi tạo đối tượng Statement (createStatement) chỉ cho phép thực hiện một hành động nào đó ví dụ insert, update, delete, …
Để thực thi câu lệnh ta có một số hàm trong Statement như executeQuery, execureUpdate, …
Ví dụ:
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
Dùng đối tượng Statement để thực thi một cấu lệnh sql, chúng ta có thể chọn lựa khi tạo đối tượng Statement (createStatement) chỉ cho phép thực hiện một hành động nào đó ví dụ insert, update, delete, …
Để thực thi câu lệnh ta có một số hàm trong Statement như executeQuery, execureUpdate, …
Ví dụ:
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
4. Xử lý kết quả nhận được
Kết quả nhận về có thể là một danh sách (nếu là loại select), hoặc các thông tin thành công thất bại, … Nếu là danh sách thì chúng được trả về trong đối tượng ResultSet. Ta sẽ duyệt đối tượng này để lấy các thông tin cần thiết
Ví dụ:
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
Kết quả nhận về có thể là một danh sách (nếu là loại select), hoặc các thông tin thành công thất bại, … Nếu là danh sách thì chúng được trả về trong đối tượng ResultSet. Ta sẽ duyệt đối tượng này để lấy các thông tin cần thiết
Ví dụ:
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
//get data from result set
while(rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
while(rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
5. Đóng kết nối
Dùng hàm close để đóng kết nối
Ví dụ:
if(conn != null)
conn.close();
Dùng hàm close để đóng kết nối
Ví dụ:
if(conn != null)
conn.close();
Note: Đây là toàn bộ code tổng hợp trong các ví dụ trên, để chạy được bạn phải cài đặt MySql Server (với account: root, password: kien0985) và tạo một database tên là musiccds và một table là cds với 3 trường id (int), artist (varchar), title (varchar)
Connection conn = null;
Connection conn = null;
try {
Class.forName(“org.gjt.mm.mysql.Driver”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/musiccds”, “root”, “kien0985″);
Class.forName(“org.gjt.mm.mysql.Driver”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/musiccds”, “root”, “kien0985″);
if(conn.isClosed()){
System.out.println(“Error get connection!”);
return;
}
System.out.println(“Error get connection!”);
return;
}
try {
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
//Create sample statement
String sqlString = “SELECT * FROM cds”;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sqlString);
while(rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
}
System.err.println(e.getMessage());
}
} catch(Exception e) {
System.err.println(e.getMessage());
}
System.err.println(e.getMessage());
}
//Close database connection
try {
if(conn != null)
conn.close();
} catch(SQLException e) {
System.err.println(e.getMessage());
}
try {
if(conn != null)
conn.close();
} catch(SQLException e) {
System.err.println(e.getMessage());
}
1.2 Statement và ResulSet
Sau đây chúng ta sẽ tìm hiểu kỹ hơn về hai đối tượng Statement và ResultSet.
Statement là một đối tượng giúp thực thi những câu lệnh sql và trả về kết quả. Để có đối tượng này, chúng ta dùng hàm createStatement của lớp Connection. Một số hàm quan trọng trong Statement như:
• executeQuery thực thi một câu lệnh có lấy giá trị trả về
• executeUpdate thực thi một câu lệnh mà không lấy giá trị trả về từ database
• getConnection trả về đối tượng Connection mà đã tạo ra Statement này
• close đóng statement
Sau đây chúng ta sẽ tìm hiểu kỹ hơn về hai đối tượng Statement và ResultSet.
Statement là một đối tượng giúp thực thi những câu lệnh sql và trả về kết quả. Để có đối tượng này, chúng ta dùng hàm createStatement của lớp Connection. Một số hàm quan trọng trong Statement như:
• executeQuery thực thi một câu lệnh có lấy giá trị trả về
• executeUpdate thực thi một câu lệnh mà không lấy giá trị trả về từ database
• getConnection trả về đối tượng Connection mà đã tạo ra Statement này
• close đóng statement
ResultSet là tập các kết quả trả về khi thực thi một câu lệnh sql. Một vài phương thức quan trọng trong ResultSet như:
• getXXX (XXX là các kiểu dữ liệu cơ bản như Int, Float, String, Object, …) dùng để lấy về dữ liệu
• updateXXX dùng để cập nhật dữ liệu cho ResultSet
• next di chuyển con trỏ tới dòng kế tiếp từ vị trí hiện hành
• previous di chuyển con trỏ ngược lại một dòng từ vị trí hiện hành
• last di chuyển con trỏ tới dòng cuối cùng của ResultSet
• first di chuyển con trỏ tới dòng đầu tiên trong ResultSet
• getArray trả về giá trị trong một cột thành một mảng
• insertRow thêm một dòng vào trong ResultSet và trong database
• deleteRow xóa một dòng trong ResultSet và trong database
• getXXX (XXX là các kiểu dữ liệu cơ bản như Int, Float, String, Object, …) dùng để lấy về dữ liệu
• updateXXX dùng để cập nhật dữ liệu cho ResultSet
• next di chuyển con trỏ tới dòng kế tiếp từ vị trí hiện hành
• previous di chuyển con trỏ ngược lại một dòng từ vị trí hiện hành
• last di chuyển con trỏ tới dòng cuối cùng của ResultSet
• first di chuyển con trỏ tới dòng đầu tiên trong ResultSet
• getArray trả về giá trị trong một cột thành một mảng
• insertRow thêm một dòng vào trong ResultSet và trong database
• deleteRow xóa một dòng trong ResultSet và trong database
Không có nhận xét nào:
Đăng nhận xét