Hướng Dẫn Sử Dụng Java JDBC Kết Nối Cơ Sở Dữ Liệu - Openplanning
Có thể bạn quan tâm
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- Database sử dụng trong tài liệu này
- JDBC là gì?
- Java kết nối với database dựa trên nguyên tắc nào?
- Download một số các driver quan trọng
- Tạo project để bắt đầu ví dụ với JDBC
- Connection
- Sử dụng JDBC API truy vấn dữ liệu
- Các kiểu ResultSet
- Ví dụ Insert dữ liệu
- PreparedStatement
- CallableStatement
- Điều khiển giao dịch (Transaction)
- Thực thi một lô lệnh (Batch)
1. Database sử dụng trong tài liệu này
Tài liệu hướng dẫn này sẽ hướng dẫn các sử dụng Java kết nối vào database. Database được sử dụng làm mẫu trong tài liệu này là "simplehr". Bạn có thể xem các script tạo database tại:- Cơ sở dữ liệu mẫu
2. JDBC là gì?
JDBC (Java Database Connectivity) là một API tiêu chuẩn dùng để tương tác với các loại cơ sở dữ liệu quan hệ. JDBC có một tập hợp các class và các Interface dùng cho ứng dụng Java có thể nói chuyện với các cơ sở dữ liệu.Các thành phần của JDBC Api về cơ bản bao gồm:- DriverManager:
- Là một class, nó dùng để quản lý danh sách các Driver (database drivers).
- Driver:
- Là một Interface, nó dùng để liên kết các liên lạc với cơ sở dữ liệu, điều khiển các liên lạc với database. Một khi Driver được tải lên, lập trình viên không cần phải gọi nó một cách cụ thể.
- Connection :
- Là một Interface với tất cả các method cho việc liên lạc với database. Nó mô tả nội dung liên lạc. tất cả các thông tin liên lạc với cơ sở dữ liệu là thông qua chỉ có đối tượng Connection.
- Statement :
- Là một Interface, gói gọn một câu lệnh SQL gửi tới cơ sở dữ liệu được phân tích, tổng hợp, lập kế hoạch và thực hiện.
- ResultSet:
- ResultSet đại diện cho tập hợp các bản ghi lấy do thực hiện truy vấn.
3. Java kết nối với database dựa trên nguyên tắc nào?
Java sử dụng JDBC để làm việc với các cơ sở dữ liệu.Ví dụ bạn làm việc với cơ sở dữ liệu Oracle từ Java bạn cần phải có Driver (Đó là class điều khiển việc kết nối với loại cơ sở dữ liệu bạn muốn). Trong JDBC API chúng ta có java.sql.Driver, nó chỉ là một interface, và nó có sẵn trong JDK. Như vậy bạn phải download thư viện Driver ứng với loại Database mà bạn mong muốn.- Chẳng hạn với Oracle thì class thi hành Interface java.sql.Driver đó là: oracle.jdbc.driver.OracleDriver
- Cách 1: Bạn hãy cung cấp thư viện Driver điều khiển loại cơ sở dữ liệu đó, đây là cách trực tiếp. Nếu bạn dùng DB oracle (hoặc DB khác) bạn phải download thư viện dành cho loại DB này.
- Cách 2: Khai báo một "ODBC DataSource", và sử dụng cầu nối JDBC-ODBC để kết nối với "ODBC DataSource" kia. Cầu nối JDBC-ODBC là thứ có sẵn trong JDBC API.
4. Download một số các driver quan trọng
Trong trường hợp nếu bạn không muốn sử dụng JDBC-ODBC, bạn có thể sử dụng cách trực tiếp kết nối vào Database, trong trường hợp đó cần phải download Driver ứng với mỗi loại DB này. Tại đây tôi hướng dẫn download một loại Driver cho các Database thông dụng:- Oracle
- MySQL
- SQLServer
- ....
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
Database | Library |
Oracle | ojdbc6.jar |
MySQL | mysql-connector-java-x.jar |
SQL Server | jtds-x.jar |
SQL Server | sqljdbc4.jar |
5. Tạo project để bắt đầu ví dụ với JDBC
Tạo mới project JavaJdbcTutorial:Tạo thư mục libs trên project và copy các thư viện kết nối trực tiếp các loại database Oracle, MySQL, SQLServer mà bạn vừa download được ở trên vào. Bạn có thể copy hết hoặc một trong các thư viện đó, theo loại DB mà bạn sử dụng.Nhấn phải vào Project chọn Properties:Giờ thì bạn có thể sẵn sàng làm việc với một trong các Database (Oracle, MySQL, SQL Server)Chú ý: Bạn chỉ cần download một Driver ứng với loại Database mà bạn quen thuộc. Cơ sở dữ liệu dùng làm ví dụ trong tài liệu này bạn có thể lấy tại:
- Cơ sở dữ liệu mẫu
6. Connection
Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn các kết nối vào cả 3 loại database:- MySQL
- SQLServer
- Oracle
Chú ý: Nếu bạn sử dụng MySQL hoặc SQL Server mặc định 2 Database này chặn không cho phép kết nối vào nó từ một IP khác. Bạn cần cấu hình để cho phép điều này. Bạn có thể xem hướng dẫn trong tài liệu cài đặt và cấu hình MySQL, SQL Server trên o7planning.Cài đặt và cấu hình MySQL Community:
- Cài đặt cơ sở dữ liệu MySQL trên Windows
Cài đặt và cấu hình SQL Server:
- Cài đặt SQL Server Express 2014 trên Windows
7. Sử dụng JDBC API truy vấn dữ liệu
Đây là hình ảnh dữ liệu trong bảng Employee. Chúng ta sẽ xem cách Java lấy ra dữ liệu thế nào thông qua một ví dụ:ResultSet là một đối tượng Java, nó được trả về khi bạn truy vấn (query) dữ liệu. Sử dụng ResultSet.next() để di chuyển con trỏ tới các bản ghi tiếp theo (Di chuyển dòng). Tại một bản ghi nào đó bạn sử dụng các method ResultSet.getXxx() để lấy ra các giá trị tại các cột. Các cột được đánh với thứ tự 1,2,3,...** ResultSet **public String getString(int columnIndex) throws SQLException; public boolean getBoolean(int columnIndex) throws SQLException; public int getInt(int columnIndex) throws SQLException; public double getDouble(int columnIndex) throws SQLException; ... public String getString(String columnLabel) throws SQLException; public boolean getBoolean(String columnLabel) throws SQLException; public int getInt(String columnLabel) throws SQLException; public double getDouble(String columnLabel) throws SQLException; ....Ví dụ minh họa:QueryDataExample.javapackage org.o7planning.tutorial.jdbc.basic; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class QueryDataExample { public static void main(String[] args) throws ClassNotFoundException, SQLException { // Lấy ra đối tượng Connection kết nối vào DB. Connection connection = ConnectionUtils.getMyConnection(); // Tạo đối tượng Statement. Statement statement = connection.createStatement(); String sql = "Select Emp_Id, Emp_No, Emp_Name from Employee"; // Thực thi câu lệnh SQL trả về đối tượng ResultSet. ResultSet rs = statement.executeQuery(sql); // Duyệt trên kết quả trả về. while (rs.next()) {// Di chuyển con trỏ xuống bản ghi kế tiếp. int empId = rs.getInt(1); String empNo = rs.getString(2); String empName = rs.getString("Emp_Name"); System.out.println("--------------------"); System.out.println("EmpId:" + empId); System.out.println("EmpNo:" + empNo); System.out.println("EmpName:" + empName); } // Đóng kết nối connection.close(); } }Kết quả chạy ví dụ:EmpId:7900 EmpNo:E7900 EmpName:ADAMS -------------------- EmpId:7934 EmpNo:E7934 EmpName:MILLER8. Các kiểu ResultSet
Bạn đã làm quen với ResultSet với các ví dụ phía trên. Mặc định các ResultSet khi duyệt dữ liệu chỉ có thể chạy từ trên xuống dưới, từ trái sang phải. Điều đó có nghĩa là với các ResultSet mặc định bạn không thể gọi:- ResultSet.previous() : Lùi lại một bản ghi.
- Trên cùng một bản ghi không thể gọi ResultSet.getXxx(4) rồi mới gọi ResultSet.getXxx(2).
resultSetType | Ý nghĩa |
TYPE_FORWARD_ONLY | - ResultSet chỉ cho phép duyệt từ trên xuống dưới, từ trái sang phải. Đây là kiểu mặc định của các ResultSet. |
TYPE_SCROLL_INSENSITIVE | - ResultSet cho phép cuộn tiến lùi, sang trái, sang phải, nhưng không nhạy với các sự thay đổi dữ liệu dưới DB. Nghĩa là trong quá trình duyệt qua một bản ghi và lúc nào đó duyệt lại bản ghi đó, nó không lấy các dữ liệu mới nhất của bản ghi mà có thể bị ai đó thay đổi. |
TYPE_SCROLL_SENSITIVE | - ResultSet cho phép cuộn tiến lùi, sang trái, sang phải, và nhạy cảm với sự thay đổi dữ liệu. |
resultSetConcurrency | Ý nghĩa |
CONCUR_READ_ONLY | - Khi duyệt dữ liệu với các ResultSet kiểu này bạn chỉ có thể đọc dữ liệu. |
CONCUR_UPDATABLE | - Khi duyệt dữ liệu với các ResultSet kiểu này bạn chỉ có thể thay đổi dữ liệu tại nơi con trỏ đứng, ví dụ update giá trị cột nào đó. |
9. Ví dụ Insert dữ liệu
InsertDataExample.javapackage org.o7planning.tutorial.jdbc.basic; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class InsertDataExample { public static void main(String[] args) throws ClassNotFoundException, SQLException { // Lấy ra kết nối tới cơ sở dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); Statement statement = connection.createStatement(); String sql = "Insert into Salary_Grade (Grade, High_Salary, Low_Salary) " + " values (2, 20000, 10000) "; // Thực thi câu lệnh. // executeUpdate(String) sử dụng cho các loại lệnh Insert,Update,Delete. int rowCount = statement.executeUpdate(sql); // In ra số dòng được trèn vào bởi câu lệnh trên. System.out.println("Row Count affected = " + rowCount); } }Kết quả chạy ví dụ:Row Count affected = 110. PreparedStatement
PreparedStatement là một Interface con của Statement. PreparedStatement sử dụng để chuẩn bị trước các câu lệnh SQL, và tái sử dụng nhiều lần, giúp cho chương trình thực hiện nhanh hơn.PrepareStatementExample.javapackage org.o7planning.tutorial.jdbc.pareparedstatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class PrepareStatementExample { public static void main(String[] args) throws ClassNotFoundException, SQLException { // Lấy ra kết nối tới cơ sở dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); // Tạo một câu SQL có 2 tham số (?) String sql = "Select emp.Emp_Id, emp.Emp_No, emp.Emp_Name, emp.Dept_Id from Employee emp " + " where emp.Emp_Name like ? and emp.Dept_Id = ? "; // Tạo một đối tượng PreparedStatement. PreparedStatement pstm = connection.prepareStatement(sql); // Sét đặt giá trị tham số thứ nhất (Dấu ? thứ nhất) pstm.setString(1, "%S"); // Sét đặt giá trị tham số thứ hai (Dấu ? thứ hai) pstm.setInt(2, 20); ResultSet rs = pstm.executeQuery(); while (rs.next()) { System.out.println(" ---- "); System.out.println("EmpId : " + rs.getInt("Emp_Id")); System.out.println("EmpNo : " + rs.getString(2)); System.out.println("EmpName : " + rs.getString("Emp_Name")); } System.out.println(); System.out.println("Set other parameters .."); // Tái sử dụng PreparedStatement. // Sét đặt các tham số khác. pstm.setString(1, "KI%"); pstm.setInt(2,10); // Thực thi câu lệnh truy vấn. rs = pstm.executeQuery(); while (rs.next()) { System.out.println(" ---- "); System.out.println("EmpId : " + rs.getInt("Emp_Id")); System.out.println("EmpNo : " + rs.getString(2)); System.out.println("EmpName : " + rs.getString("Emp_Name")); } } }Kết quả chạy ví dụ:---- EmpId : 7566 EmpNo : E7566 EmpName : JONES ---- EmpId : 7876 EmpNo : E7876 EmpName : ADAMS Set other parameters ... ---- EmpId : 7839 EmpNo : E7839 EmpName : KING11. CallableStatement
CallableStatement được xây dựng để gọi một thủ tục (procedure) hoặc hàm (function) của SQL.// Câu lệnh gọi thủ tục SQL trên Java String sql = "{call procedure_name(?,?,?)}"; // Câu lệnh gọi một hàm SQL trên Java String sql ="{? = call function_name(?,?,?)}";Để làm ví dụ với CallableStatement chúng ta cần một hàm hoặc một thủ tục trong DB. Với Oracle, MySQL hoặc SQLServer bạn có thể tạo nhanh một thủ tục như dưới đây:ORACLEGet_Employee_Info-- Thủ tục lấy ra thông tin của một nhân viên, -- Truyền vào tham số p_Emp_ID (Integer) -- Có 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date Create Or Replace Procedure Get_Employee_Info(p_Emp_Id Integer ,v_Emp_No Out Varchar2 ,v_First_Name Out Varchar2 ,v_Last_Name Out Varchar2 ,v_Hire_Date Out Date) Is Begin v_Emp_No := 'E' || p_Emp_Id; -- v_First_Name := 'Michael'; v_Last_Name := 'Smith'; v_Hire_Date := Sysdate; End Get_Employee_Info;MySQLGet_Employee_Info-- Thủ tục lấy ra thông tin của một nhân viên, -- Truyền vào tham số p_Emp_ID (Integer) -- Có 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date CREATE PROCEDURE get_Employee_Info(p_Emp_ID Integer, out v_Emp_No Varchar(50) , out v_First_Name Varchar(50) , Out v_Last_name Varchar(50) , Out v_Hire_date Date) BEGIN set v_Emp_No = concat( 'E' , Cast(p_Emp_Id as char(15)) ); -- set v_First_Name = 'Michael'; set v_Last_Name = 'Smith'; set v_Hire_date = curdate(); ENDSQL ServerGet_Employee_Info-- Thủ tục lấy ra thông tin của một nhân viên, -- Truyền vào tham số p_Emp_ID (Integer) -- Có 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date CREATE PROCEDURE Get_Employee_Info @p_Emp_Id Integer , @v_Emp_No Varchar(50) OUTPUT, @v_First_Name Varchar(50) OUTPUT, @v_Last_Name Varchar(50) OUTPUT, @v_Hire_Date Date OUTPUT AS BEGIN set @v_Emp_No = 'E' + CAST( @p_Emp_Id as varchar) ; -- set @v_First_Name = 'Michael'; set @v_Last_Name = 'Smith'; set @v_Hire_date = getdate(); ENDCallableStatementExample.javapackage org.o7planning.tutorial.jdbc.callablestatement; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Date; import java.sql.SQLException; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class CallableStatementExample { public static void main(String[] args) throws ClassNotFoundException, SQLException { // Lấy ra kết nối tới cơ sở dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); // Câu lệnh gọi thủ tục (***) String sql = "{call get_Employee_Info(?,?,?,?,?)}"; // Tạo một đối tượng CallableStatement. CallableStatement cstm = connection.prepareCall(sql); // Truyền tham số vào hàm (p_Emp_ID) // (Là dấu chấm hỏi thứ 1 trên câu lệnh sql ***) cstm.setInt(1, 10); // Đăng ký nhận giá trị trả về tại dấu hỏi thứ 2 // (v_Emp_No) cstm.registerOutParameter(2, java.sql.Types.VARCHAR); // Đăng ký nhận giá trị trả về tại dấu hỏi thứ 3 // (v_First_Name) cstm.registerOutParameter(3, java.sql.Types.VARCHAR); // Đăng ký nhận giá trị trả về tại dấu hỏi thứ 4 // (v_Last_Name) cstm.registerOutParameter(4, java.sql.Types.VARCHAR); // Đăng ký nhận giá trị trả về tại dấu hỏi thứ 5 // (v_Hire_Date) cstm.registerOutParameter(5, java.sql.Types.DATE); // Thực thi câu lệnh cstm.executeUpdate(); String empNo = cstm.getString(2); String firstName = cstm.getString(3); String lastName = cstm.getString(4); Date hireDate = cstm.getDate(5); System.out.println("Emp No: " + empNo); System.out.println("First Name: " + firstName); System.out.println("Last Name: " + lastName); System.out.println("Hire Date: " + hireDate); } }Kết quả chạy ví dụ:Emp No : E10 First Name: Michael Last Name: Smith Hire Date: 2015-03-0112. Điều khiển giao dịch (Transaction)
Giao dịch (Transaction) là một khái niệm quan trọng trong SQL. Ví dụ người A chuyển một khoản tiền 1000$ vào tài khoản người B như vậy trong Database diễn ra 2 quá trình:- Trừ số dư tài khoản của người A đi 1000$
- Thêm vào số dư tài khoản của người B 1000$.
13. Thực thi một lô lệnh (Batch)
BatchExample.javapackage org.o7planning.tutorial.transaction; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class BatchExample { public static void main(String[] args) throws SQLException, ClassNotFoundException { Connection conn = ConnectionUtils.getMyConnection(); try { // Create statement object Statement stmt = conn.createStatement(); // Set auto-commit to false conn.setAutoCommit(false); // Create SQL statement // Tạo câu lệnh Insert dữ liệu vào bảng Employee String sql1 = "Update Employee emp set emp.Salary = emp.Salary + 100 " + " where emp.Dept_Id = 10 "; // Add above SQL statement in the batch. // Thêm câu lệnh SQL trên vào lô stmt.addBatch(sql1); // Create one more SQL statement String sql2 = "Update Employee emp set emp.Salary = emp.Salary + 20 " + " where emp.Dept_Id = 20 "; // Add above SQL statement in the batch. // Thêm vào lô stmt.addBatch(sql2); // Create one more SQL statement String sql3 = "Update Employee emp set emp.Salary = emp.Salary + 30 " + " where emp.Dept_Id = 30 "; // Add above SQL statement in the batch. // Thêm vào lô stmt.addBatch(sql3); // Create an int[] to hold returned values int[] counts = stmt.executeBatch(); System.out.println("Sql1 count = " + counts[0]); System.out.println("Sql2 count = " + counts[1]); System.out.println("Sql3 count = " + counts[2]); // Explicitly commit statements to apply changes conn.commit(); } catch (Exception e) { e.printStackTrace(); conn.rollback(); } } }Kết quả chạy ví dụ:Sql1 count = 2 Sql2 count = 5 Sql3 count = 7BatchExample2.javapackage org.o7planning.tutorial.transaction; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.UUID; import org.o7planning.tutorial.jdbc.ConnectionUtils; public class BatchExample2 { public static void main(String[] args) throws ClassNotFoundException, SQLException { Connection conn = ConnectionUtils.getMyConnection(); try { String sql = "Insert into Timekeeper(Timekeeper_Id, Date_Time, In_Out, Emp_Id) " + " values (?,?,?,?) "; // Create statement object PreparedStatement stmt = conn.prepareStatement(sql); // Set auto-commit to false conn.setAutoCommit(false); // Sét đặt các tham số. stmt.setString(1, UUID.randomUUID().toString()); stmt.setDate(2, new Date(System.currentTimeMillis())); stmt.setString(3, "I"); stmt.setInt(4, 7839); // Thêm vào lô. stmt.addBatch(); // Sét đặt các giá trị tham số khác stmt.setString(1, UUID.randomUUID().toString()); stmt.setDate(2, new Date(System.currentTimeMillis())); stmt.setString(3, "I"); stmt.setInt(4, 7566); // Thêm vào lô. stmt.addBatch(); // Create an int[] to hold returned values int[] counts = stmt.executeBatch(); System.out.println("counts[0] = " + counts[0]); System.out.println("counts[1] = " + counts[1]); // Explicitly commit statements to apply changes conn.commit(); } catch (Exception e) { e.printStackTrace(); conn.rollback(); } } }Kết quả chạy ví dụ:counts[0] = 1 counts[1] = 1Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud
Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud
Các bài viết mới nhất
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Radio
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Hướng dẫn và ví dụ Flutter SharedPreferences
- Tạo Module trong Flutter
- Flutter upload ảnh sử dụng http và ImagePicker
- Bài thực hành Dart http CRUD
- Hướng dẫn và ví dụ Flutter image_picker
- Flutter GridView với SliverGridDelegate tuỳ biến
- Java cơ bản
Từ khóa » Kết Nối Database Trong Java
-
Hướng Dẫn Kết Nối Cơ Sở Dữ Liệu Với Java JDBC | TopDev
-
Hướng Dẫn Sử Dụng JDBC Kết Nối Cơ Sở Dữ Liệu Trong Java
-
Kết Nối Java Với SQL Server - VietTuts
-
Kết Nối Database Với Java Spring - Viblo
-
Bài 44: Kết Nối Cơ Sở Dữ Liệu Với Thư Viện JDBC Trong Java - VnCoder
-
Java3 Java Swing Hướng Dẫn Kết Nối Database JDBC Với Netbean 11 ...
-
Kết Nối Cơ Sở Dữ Liệu Trong Java Với JDBC
-
Kết Nối JDBC Với Cơ Sở Dữ Liệu - Hoclaptrinh
-
Tạo Ứng Dụng Quản Lý Sinh Viên Với JDBC Như Thế Nào?
-
Tạo Kết Nối đến Database Sử Dụng JDBC - Deft Blog
-
Kết Nối Sql Server Với Java - StuDocu
-
Hướng Dẫn Kết Nối Java Với Sql Server
-
Kết Nối Cơ Sở Dữ Liệu Trong Java Với JDBC - Hoclaptrinh