Jdbc là gì

     
*

DriverManager:Là một class, nó sử dụng để làm chủ danh sách các Driver (database drivers).

Bạn đang xem: Jdbc là gì

Driver:Là một Interface, nó dùng để làm liên kết những liên lạc với các đại lý dữ liệu, điều khiển các liên hệ với database. Một lúc Driver được sở hữu lên, xây dựng viên không nhất thiết phải gọi nó một cách cụ thể.Connection :Là một Interface với toàn bộ các method cho vấn đề liên lạc cùng với database. Nó diễn đạt nội dung liên lạc. Toàn bộ các tin tức liên lạc với cơ sở tài liệu là trải qua chỉ có đối tượng người tiêu dùng Connection.Statement :Là một Interface, gói gọn gàng một câu lệnh SQL gửi tặng cơ sở dữ liệu được phân tích, tổng hợp, lập planer và thực hiện.ResultSet:ResultSet đại diện cho tập đúng theo các bản ghi đem do triển khai truy vấn.
*

*

Ví dụ bạn thao tác với cơ sở dữ liệu Oracle từ Java bạn phải có Driver (Đó là class tinh chỉnh và điều khiển việc liên kết với nhiều loại cơ sở tài liệu bạn muốn). Vào JDBC API họ có java.sql.Driver, nó chỉ là 1 trong interface, và nó tất cả sẵn vào JDK. Như vậy bạn phải tải về thư viện Driver ứng với nhiều loại Database cơ mà bạn ao ước muốn.Chẳng hạn cùng với Oracle thì class thực hành Interface java.sql.Driver kia là: oracle.jdbc.driver.OracleDriver java.sql.DriverManager là một trong class vào JDBC API. Nó làm nhiệm vụ làm chủ các Driver.
*

Chúng ta bao gồm 2 phương pháp để làm vấn đề với một loại cơ sở dữ liệu ví dụ nào đó.Cách 1: các bạn hãy cung ứng thư viện Driver điều khiển và tinh chỉnh loại cơ sở dữ liệu đó, đấy là cách trực tiếp. Nếu như khách hàng dùng DB oracle (hoặc DB khác) các bạn phải tải về thư viện giành riêng cho loại DB này.Cách 2: Khai báo một "ODBC DataSource", và áp dụng cầu nối JDBC-ODBC để liên kết với "ODBC DataSource" kia. Mong nối JDBC-ODBC là thứ gồm sẵn trong JDBC API.
Câu hỏi của bọn họ là "ODBC DataSource" là chiếc gì?ODBC - mở cửa Database Connectivity: Nó đó là một cỗ thư viện mở, có tác dụng kết nối với phần nhiều các nhiều loại cơ sở dữ liệu khác nhau, cùng nó miễn phí. Được cung ứng bởi Microsoft.ODBC DataSource: bên trên hệ quản lý Window bạn có thể khai báo một liên kết ODBC tới một các loại DB nào đó. Và như vậy họ có một nguồn dữ liệu (Data Source).Trong JDBC API, đã sản xuất sẵn một mong nối JDBC-ODBC để JDBC nói theo cách khác chuyện được cùng với ODBC Data Source.
Trong ngôi trường hợp nếu như khách hàng không mong sử dụng JDBC-ODBC, bạn có thể sử dụng cách trực tiếp liên kết vào Database, trong trường hợp đó rất cần được download Driver ứng với mỗi các loại DB này. Tại phía trên tôi hướng dẫn download một nhiều loại Driver cho những Database thông dụng:
Tạo folder libs bên trên project cùng copy các thư viện kết nối trực tiếp các loại database Oracle, MySQL, SQLServer mà các bạn vừa tải về được làm việc trên vào. Chúng ta cũng có thể copy hết hoặc một trong các thư viện đó, theo nhiều loại DB mà các bạn sử dụng.

Chú ý: Bạn chỉ cần download một Driver ứng với các loại Database mà chúng ta quen thuộc. Cơ sở tài liệu dùng có tác dụng ví dụ trong tài liệu này chúng ta cũng có thể lấy tại:


package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.SQLException;public class ConnectionUtils public static Connection getMyConnection() throws SQLException, ClassNotFoundException // thực hiện Oracle. // chúng ta cũng có thể thay thế vì Database nào đó. Return OracleConnUtils.getOracleConnection(); // // thử nghiệm Connection ... // public static void main(String<> args) throws SQLException, ClassNotFoundException System.out.println("Get connection ... "); // rước ra đối tượng người tiêu dùng Connection liên kết vào database. Connection conn = ConnectionUtils.getMyConnection(); System.out.println("Get connection " + conn); System.out.println("Done!");
package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class OracleConnUtils // liên kết vào ORACLE. Public static Connection getOracleConnection() throws SQLException, ClassNotFoundException String hostName = "localhost"; String sid = "db11g"; String userName = "simplehr"; String password = "simplehr"; return getOracleConnection(hostName, sid, userName, password); public static Connection getOracleConnection(String hostName, String sid, String userName, String password) throws ClassNotFoundException, SQLException // Khai báo class Driver mang lại DB Oracle // việc này quan trọng với Java 5 // Java6 auto tìm kiếm Driver ưng ý hợp. // nếu bạn dùng Java6, thì ko yêu cầu dòng này cũng được. Class.forName("oracle.jdbc.driver.OracleDriver"); // cấu trúc URL Connection giành riêng cho Oracle // Ví dụ: jdbc:oracle:thin:
" + hostName + ":1521:" + sid; Connection conn = DriverManager.getConnection(connectionURL, userName, password); return conn;
package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class MySQLConnUtils // liên kết vào MySQL. Public static Connection getMySQLConnection() throws SQLException, ClassNotFoundException String hostName = "localhost"; String dbName = "simplehr"; String userName = "root"; String password = "1234"; return getMySQLConnection(hostName, dbName, userName, password); public static Connection getMySQLConnection(String hostName, String dbName, String userName, String password) throws SQLException, ClassNotFoundException // Khai báo class Driver mang đến DB MySQL // vấn đề này cần thiết với Java 5 // Java6 tự động tìm kiếm Driver say đắm hợp. // nếu khách hàng dùng Java6, thì ko cần dòng này cũng được. Class.forName("com.mysql.jdbc.Driver"); // cấu trúc URL Connection giành cho Oracle // Ví dụ: jdbc:mysql://localhost:3306/simplehr String connectionURL = "jdbc:mysql://" + hostName + ":3306/" + dbName; Connection conn = DriverManager.getConnection(connectionURL, userName, password); return conn;
package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class SQLServerConnUtils_JTDS // liên kết vào SQLServer. // (Sử dụng thư viện điều khiển và tinh chỉnh JTDS) public static Connection getSQLServerConnection() throws SQLException, ClassNotFoundException String hostName = "localhost"; String sqlInstanceName = "SQLEXPRESS"; String database = "simplehr"; String userName = "sa"; String password = "1234"; return getSQLServerConnection(hostName, sqlInstanceName, database, userName, password); // ngôi trường hợp sử dụng SQLServer. // cùng thư viện JTDS. Public static Connection getSQLServerConnection(String hostName, String sqlInstanceName, String database, String userName, String password) throws ClassNotFoundException, SQLException // Khai báo class Driver đến DB SQLServer // câu hỏi này quan trọng với Java 5 // Java6 tự động hóa tìm tìm Driver thích hợp. // nếu khách hàng dùng Java6, thì ko phải dòng này cũng được. Class.forName("net.sourceforge.jtds.jdbc.Driver"); // cấu trúc URL Connection giành riêng cho SQLServer // Ví dụ: // jdbc:jtds:sqlserver://localhost:1433/simplehr;instance=SQLEXPRESS String connectionURL = "jdbc:jtds:sqlserver://" + hostName + ":1433/" + database + ";instance=" + sqlInstanceName; Connection conn = DriverManager.getConnection(connectionURL, userName, password); return conn;
package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class SQLServerConnUtils_SQLJDBC // liên kết vào SQLServer. // (Sử dụng thư viện điều khiển và tinh chỉnh SQLJDBC) public static Connection getSQLServerConnection() throws SQLException, ClassNotFoundException String hostName = "localhost"; String sqlInstanceName = "SQLEXPRESS"; String database = "simplehr"; String userName = "sa"; String password = "1234"; return getSQLServerConnection(hostName, sqlInstanceName, database, userName, password); // trường hợp sử dụng SQLServer. // và thư viện SQLJDBC. Public static Connection getSQLServerConnection(String hostName, String sqlInstanceName, String database, String userName, String password) throws ClassNotFoundException, SQLException // Khai báo class Driver cho DB SQLServer // bài toán này quan trọng với Java 5 // Java6 tự động hóa tìm kiếm Driver yêu thích hợp. // nếu như khách hàng dùng Java6, thì ko đề xuất dòng này cũng được. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // kết cấu URL Connection dành cho SQLServer // Ví dụ: // jdbc:sqlserver://ServerIp:1433/SQLEXPRESS;databaseName=simplehr String connectionURL = "jdbc:sqlserver://" + hostName + ":1433" + ";instance=" + sqlInstanceName + ";databaseName=" + database; Connection conn = DriverManager.getConnection(connectionURL, userName, password); return conn;
package org.o7planning.tutorial.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class ODBCConnUtils // lôi ra kết nối vào ODBC Data Source mang tên "simplehr-ds". Public static Connection getJdbcOdbcConnection() throws SQLException, ClassNotFoundException String odbcDataSourceName = "simplehr-ds"; String userName = "simplehr"; String password = "simplehr"; return getJdbcOdbcConnection(odbcDataSourceName, userName, password); public static Connection getJdbcOdbcConnection(String odbcDataSourceName, String userName, String password) throws SQLException, ClassNotFoundException // Khai báo class Driver (Cầu nối Jdbc-Odbc) // việc này cần thiết với Java 5 // Java6 tự động hóa tìm tìm Driver mê thích hợp. // nếu khách hàng dùng Java6, thì ko buộc phải dòng này cũng được. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // cấu tạo URL Connection dành cho JDBC-ODBC String connectionURL = "jdbc:odbc:" + odbcDataSourceName; Connection conn = DriverManager.getConnection(connectionURL, userName, password); return conn;
Bạn có thể biến đổi Class ConnectionUtils để sử dụng kết nối tới một Database nào kia quen thuộc. Cùng chạy class này để chạy thử kết nối.
Chú ý: nếu khách hàng sử dụng MySQL hoặc SQL Server khoác định 2 Database này chặn không cho phép kết nối vào nó xuất phát điểm từ 1 IP khác. Chúng ta cần thông số kỹ thuật để cho phép điều này. Chúng ta cũng có thể xem chỉ dẫn trong tài liệu thiết lập và cấu hình MySQL, SQL hệ thống trên o7planning.

Xem thêm: Lời Mình Là Gì Của Nhau - Lời Bài Hát Mình Là Gì Của Nhau


Cài để và thông số kỹ thuật MySQL Community:
Cài để và cấu hình SQL Server:


7- áp dụng JDBC API truy tìm vấn dữ liệu


Đây là hình hình ảnh dữ liệu trong bảng Employee. Bọn họ sẽ xem cách Java lấy ra tài liệu thế nào thông sang 1 ví dụ:
ResultSet là một đối tượng người sử dụng Java, nó được trả về khi bạn truy vấn (query) dữ liệu. Thực hiện ResultSet.next() để dịch rời con trỏ tới các phiên bản ghi tiếp sau (Di đưa dòng). Tại một bản ghi nào đó chúng ta sử dụng những method ResultSet.getXxx() để lấy ra các giá trị tại các cột. Các cột được tiến công với đồ vật tự 1,2,3,...

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;....
package 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 // rước ra đối tượng Connection liên kết vào DB. Connection connection = ConnectionUtils.getMyConnection(); // Tạo đối tượng người dùng Statement. Statement statement = connection.createStatement(); String sql = "Select Emp_Id, Emp_No, Emp_Name from Employee"; // tiến hành câu lệnh SQL trả về đối tượng người tiêu dùng ResultSet. ResultSet rs = statement.executeQuery(sql); // săn sóc trên tác dụng trả về. While (rs.next()) // dịch rời 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 trái chạy ví dụ:
EmpId:7900EmpNo:E7900EmpName:ADAMS--------------------EmpId:7934EmpNo:E7934EmpName:MILLER

8- những kiểu ResultSet


Bạn đã làm quen với ResultSet với những ví dụ phía trên. Mang định những ResultSet khi duyệt dữ liệu chỉ hoàn toàn có thể chạy từ bên trên xuống dưới, từ bỏ trái sang trọng phải. Điều đó có nghĩa là với những ResultSet mặc định chúng ta không thể gọi:ResultSet.previous() : Lùi lại một bạn dạng ghi.Trên thuộc một bản ghi không thể gọi ResultSet.getXxx(4) rồi bắt đầu gọi ResultSet.getXxx(2).Việc cố tình gọi có khả năng sẽ bị một Exception.
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;// Ví dụ:Statement statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);// ResultSet có thể cuộn (tiến lùi, sang trọng trái quý phái phải).ResultSet rs = statement.executeQuery(sql);
resultSetTypeÝ nghĩa
TYPE_FORWARD_ONLY- ResultSet chỉ cho phép duyệt từ trên xuống dưới, tự trái sang trọng phải. Đây là thứ hạng mặc định của các ResultSet.
TYPE_SCROLL_INSENSITIVE- ResultSet cho phép cuộn tiến lùi, lịch sự trái, sang phải, dẫu vậy không nhạy với những sự biến hóa dữ liệu dưới DB. Tức thị trong quá trình duyệt qua một phiên bản ghi và lúc nào đó chăm bẵm lại phiên bản ghi đó, nó không lấy các dữ liệu tiên tiến nhất của bạn dạng ghi mà có thể bị ai đó ráng đổi.
TYPE_SCROLL_SENSITIVE- ResultSet cho phép cuộn tiến lùi, sang trái, sang trọng phải, cùng nhạy cảm với sự thay đổi dữ liệu.

resultSetConcurrencyÝ nghĩa
CONCUR_READ_ONLY- lúc duyệt tài liệu với những ResultSet kiểu này chúng ta chỉ rất có thể đọc dữ liệu.
CONCUR_UPDATABLE- lúc duyệt tài liệu với các ResultSet kiểu này các bạn chỉ có thể biến hóa dữ liệu tại nơi con trỏ đứng, lấy một ví dụ update giá trị cột làm sao đó.

package 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 ScrollableResultSetExample public static void main(String<> args) throws ClassNotFoundException, SQLException // rước ra đối tượng người tiêu dùng Connection kết nối tới DB. Connection connection = ConnectionUtils.getMyConnection(); // tạo nên một đối tượng người tiêu dùng Statement // hoàn toàn có thể cuộn dữ liệu, tuy nhiên không nhậy cùng với các chuyển đổi dưới DB. // bé trỏ chỉ có khả năng đọc, không có chức năng update tài liệu trong quá trình duyệt. Statement statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); String sql = "Select Emp_Id, Emp_No, Emp_Name from Employee"; // thực hiện câu lệnh SQL trả về đối tượng ResultSet. ResultSet rs = statement.executeQuery(sql); // Nhẩy con trỏ cho tới cuối boolean last = rs.last(); System.out.println("last : "+ last); if(last) // Ghi ra thông tin bản ghi cuối. System.out.println("EmpId:" + rs.getInt(1)); System.out.println("EmpNo:" + rs.getString(2)); System.out.println("EmpName:" + rs.getString(3)); System.out.println("--------------------"); // Nhẩy nhỏ trỏ lùi lại lần 1 boolean previous =rs.previous(); System.out.println("Previous 1: "+ previous); // Nhẩy lùi bé trỏ lần 2 previous =rs.previous(); System.out.println("Previous 2: "+ previous); // thông qua trên công dụng trả về. While (rs.next()) // Lấy tài liệu cột 2 String empNo = rs.getString(2); // Rồi bắt đầu lấy tài liệu cột 1. Int empId = rs.getInt(1); 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 liên kết connection.close();
last : trueEmpId:7934EmpNo:E7934EmpName:MILLER--------------------Previous 1: truePrevious 2: true--------------------EmpId:7902EmpNo:E7902EmpName:FORD--------------------EmpId:7934EmpNo:E7934EmpName:MILLER
package 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ôi ra kết nối tới đại lý 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) "; // xúc tiến 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ố cái được trèn vào vày câu lệnh trên. System.out.println("Row Count affected = " + rowCount);
Kết trái chạy ví dụ:
Row Count affected = 1

10- PreparedStatement


PreparedStatement là một trong Interface bé của Statement.PreparedStatement sử dụng để sẵn sàng trước những câu lệnh SQL, cùng tái áp dụng nhiều lần, giúp cho chương trình tiến hành nhanh hơn.

Xem thêm: Mướp Đắng Có Tác Dụng Gì? Uống Nước Mướp Đắng Phơi Khô Có Tác Dụng Gì?


package 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ửa hàng dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); // sinh sản một câu SQL bao gồm 2 thông số (?) String sql = "Select emp.Emp_Id, emp.Emp_No, emp.Emp_Name, emp.Dept_Id from Employee emp " + " where emp.Emp_Name lượt thích ? & emp.Dept_Id = ? "; // tạo thành một đối tượng PreparedStatement. PreparedStatement pstm = connection.prepareStatement(sql); // Sét đặt giá trị tham số đầu tiên (Dấu ? máy nhất) pstm.setString(1, "%S"); // Sét đặt giá trị tham số sản phẩm hai (Dấu ? sản phẩm 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 thực hiện PreparedStatement. // Sét đặt những tham số khác. Pstm.setString(1, "KI%"); pstm.setInt(2,10); // xúc tiến câu lệnh truy tìm 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"));
----EmpId : 7566EmpNo : E7566EmpName : JONES ----EmpId : 7876EmpNo : E7876EmpName : ADAMSSet other parameters ... ----EmpId : 7839EmpNo : E7839EmpName : KING
// Câu lệnh gọi thủ tục SQL bên trên JavaString sql = "call procedure_name(?,?,?)";// Câu lệnh gọi một hàm SQL trên JavaString sql ="? = điện thoại tư vấn function_name(?,?,?)";
Để làm cho ví dụ với CallableStatement chúng ta cần một hàm hoặc một giấy tờ thủ tục trong DB. Với Oracle, MySQL hoặc SQLServer bạn hoàn toàn có thể tạo nhanh một thủ tục như bên dưới đây:
-- Thủ tục mang ra thông tin của một nhân viên,-- Truyền vào thông số p_Emp_ID (Integer)-- tất cả 4 tham số áp sạc ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_DateCreate 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) IsBegin v_Emp_No := "E" || p_Emp_Id; -- v_First_Name := "Michael"; v_Last_Name := "Smith"; v_Hire_Date := Sysdate;End Get_Employee_Info;
-- Thủ tục lôi 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 output v_Emp_No, v_First_Name, v_Last_Name, v_Hire_DateCREATE 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 mix v_Emp_No = concat( "E" , Cast(p_Emp_Id as char(15)) );-- phối v_First_Name = "Michael"; set v_Last_Name = "Smith"; phối v_Hire_date = curdate();END
-- Thủ tục mang ra thông tin của một nhân viên,-- Truyền vào thông số p_Emp_ID (Integer)-- có 4 tham số cổng đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_DateCREATE PROCEDURE Get_Employee_Info
package 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 // mang ra kết nối tới cửa hàng dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); // Câu lệnh gọi thủ tục (***) String sql = "call get_Employee_Info(?,?,?,?,?)"; // tạo ra một đối tượng người tiêu dùng CallableStatement. CallableStatement cstm = connection.prepareCall(sql); // Truyền thông số vào hàm (p_Emp_ID) // (Là dấu chấm hỏi thứ nhất trên câu lệnh sql ***) cstm.setInt(1, 10); // Đăng ký nhận quý hiếm trả về tại vệt hỏi thứ 2 // (v_Emp_No) cstm.registerOutParameter(2, java.sql.Types.VARCHAR); // Đăng ký nhận quý giá trả về tại vệt hỏi máy 3 // (v_First_Name) cstm.registerOutParameter(3, java.sql.Types.VARCHAR); // Đăng ký nhận quý hiếm trả về tại lốt hỏi trang bị 4 // (v_Last_Name) cstm.registerOutParameter(4, java.sql.Types.VARCHAR); // Đăng ký kết nhận quý hiếm trả về tại dấu hỏi vật dụng 5 // (v_Hire_Date) cstm.registerOutParameter(5, java.sql.Types.DATE); // xúc tiến 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 trái chạy ví dụ:

12- Điều khiển giao dịch (Transaction)


Giao dịch (Transaction) là một trong những khái niệm quan trọng trong SQL.Ví dụ fan A gửi một khoản tiền 1000$ vào tài khoản người B vậy nên trong Database ra mắt 2 quá trình:Trừ số dư tài khoản của bạn A đi 1000$Thêm vào số dư tài khoản của bạn B 1000$.Và giao dịch được hotline là thành công nếu cả hai bước tê thành công. Ngược lại chỉ cần 1 vào hai cách hỏng là coi như giao dịch không thành công, nên rollback lại tâm trạng ban đầu.
package org.o7planning.tutorial.transaction;import java.sql.Connection;import java.sql.SQLException;import org.o7planning.tutorial.jdbc.ConnectionUtils;public class TransactionExample private static void doJob1(Connection conn) // Làm gì đấy tại đây. // Insert update dữ liêu. private static void doJob2(Connection conn) // Làm gì đấy tại đây. // Insert update dữ liêu. public static void main(String<> args) throws ClassNotFoundException, SQLException // mang ra kết nối tới cơ sở dữ liệu. Connection connection = ConnectionUtils.getMyConnection(); // Sét để chế độ tự động Commit thành false // Để tự cai quản việc commit bên trên chương trình. Connection.setAutoCommit(false); try // có tác dụng một việc nào đó liên quan tới DB. DoJob1(connection); // Lamf trọng trách thứ 2 doJob2(connection); // điện thoại tư vấn method commit dữ liệu xuống DB. Connection.commit(); // bao gồm vấn đề nào đấy lỗi xẩy ra. Catch (Exception e) e.printStackTrace(); // Rollback dữ liệu connection.rollback(); // Đóng Connection. Connection.close();
package 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 // chế tác câu lệnh Insert dữ liệu vào bảng Employee String sql1 = "Update Employee emp phối emp.Salary = emp.Salary + 100 " + " where emp.Dept_Id = 10 "; // add above SQL statement in the batch. // Thêm câu lệnh SQL bên trên vào lô stmt.addBatch(sql1); // Create one more SQL statement String sql2 = "Update Employee emp set emp.Salary = emp.Salary + trăng tròn " + " where emp.Dept_Id = 20 "; // add above SQL statement in the batch. // sản xuất 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 "; // địa chỉ cửa hàng above SQL statement in the batch. // cung cấp lô stmt.addBatch(sql3); // Create an int<> khổng lồ 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 khổng lồ apply changes conn.commit(); catch (Exception e) e.printStackTrace(); conn.rollback();
Kết trái chạy ví dụ:
Sql1 count = 2Sql2 count = 5Sql3 count = 7
BatchExample2.java
package 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); // mix auto-commit khổng lồ 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); // sản xuất lô. Stmt.addBatch(); // Sét đặt những 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); // cấp dưỡng lô. Stmt.addBatch(); // Create an int<> khổng lồ 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 lớn apply changes conn.commit(); catch (Exception e) e.printStackTrace(); conn.rollback();