Nhiệm vụ ở đây là soạn thảo một chương trình Python hoạt động với sự hỗ trợ của SQL để kết nối dữ liệu. Bất cứ khi nào việc chèn vào cơ sở dữ liệu diễn ra, ID của hàng được chèn sẽ được in. Để kết nối python với cơ sở dữ liệu, chúng tôi đang sử dụng trình kết nối MySQL. Công việc của trình kết nối mysql là cung cấp quyền truy cập vào Trình điều khiển MySQL cho ngôn ngữ được yêu cầu. Do đó, nó tạo ra một kết nối giữa ngôn ngữ lập trình và MySQL Server.
Mệnh đề INSERT trong SQL
Như tên gợi ý, nó chèn dữ liệu vào cơ sở dữ liệu. Một số quy tắc cần phải được tuân theo trong khi sử dụng lệnh chèn. Dữ liệu được cập nhật phải theo thứ tự giống như các cột của cơ sở dữ liệu hoặc tên của các cột phải được cung cấp cho truy vấn cùng với dữ liệu được chèn
cú pháp
INSERT INTO [Col1,Col2, …]
GIÁ TRỊ[…. ];
Để in ID của hàng được chèn cuối cùng, lastrowid sẽ được sử dụng. Đây là một từ khóa đặc biệt in ID của hàng được chèn lần cuối nhưng để làm như vậy, có một số giao thức nhất định phải được ghi nhớ trước khi sử dụng từ khóa này
Để truy xuất các khóa được tạo tự động do câu lệnh INSERT tạo ra, bạn cần thực hiện các bước sau
- Sử dụng một trong các phương pháp sau để cho biết rằng bạn muốn trả về các khóa được tạo tự động
- Nếu bạn định sử dụng PreparedStatement. execUpdate để chèn hàng, hãy gọi một trong các dạng này của Kết nối. Chuẩn bị phương thức để tạo đối tượng PreparedStatement .
Biểu mẫu sau đây hợp lệ cho một bảng trên bất kỳ nguồn dữ liệu nào hỗ trợ các cột nhận dạng
Hạn chế. Dành cho Trình điều khiển máy chủ dữ liệu IBM dành cho JDBC và SQLJ phiên bản 3. 57 trở lên, biểu mẫu sau không hợp lệ để chèn hàng vào chế độ xem trên máy chủ dữ liệu Db2® for z/OS® .
Connection.prepareStatement[sql-statement, Statement.RETURN_GENERATED_KEYS];
Nếu máy chủ dữ liệu là Db2 cho z/OS , các biểu mẫu sau chỉ hợp lệ nếu máy chủ dữ liệu hỗ trợ câu lệnh SELECT FROM INSERT. Với biểu mẫu đầu tiên, bạn chỉ định tên của các cột mà bạn muốn các khóa được tạo tự động. Với biểu mẫu thứ hai, bạn chỉ định các vị trí trong bảng cột mà bạn muốn các khóa được tạo tự động.
Connection.prepareStatement[sql-statement, String [] columnNames]; Connection.prepareStatement[sql-statement, int [] columnIndexes];
- Nếu bạn sử dụng Câu lệnh. execUpdate để chèn hàng, gọi một trong các dạng này của Câu lệnh. phương thức execUpdate .
Biểu mẫu sau đây hợp lệ cho một bảng trên bất kỳ nguồn dữ liệu nào hỗ trợ các cột nhận dạng
Hạn chế. Dành cho Trình điều khiển máy chủ dữ liệu IBM dành cho JDBC và SQLJ phiên bản 3. 57 trở lên, biểu mẫu sau không hợp lệ để chèn hàng vào chế độ xem trên máy chủ dữ liệu Db2 cho z/OS .
Statement.executeUpdate[sql-statement, Statement.RETURN_GENERATED_KEYS];
Nếu máy chủ dữ liệu là Db2 cho z/OS , các biểu mẫu sau chỉ hợp lệ nếu máy chủ dữ liệu hỗ trợ câu lệnh SELECT FROM INSERT. Với biểu mẫu đầu tiên, bạn chỉ định tên của các cột mà bạn muốn các khóa được tạo tự động. Với biểu mẫu thứ hai, bạn chỉ định các vị trí trong bảng cột mà bạn muốn các khóa được tạo tự động.
Statement.executeUpdate[sql-statement, String [] columnNames]; Statement.executeUpdate[sql-statement, int [] columnIndexes];
- Nếu bạn định sử dụng PreparedStatement. execUpdate để chèn hàng, hãy gọi một trong các dạng này của Kết nối. Chuẩn bị phương thức để tạo đối tượng PreparedStatement .
- Gọi PreparedStatement. getGeneratedKeys hoặc Câu lệnh. getGeneratedKeys để truy xuất đối tượng ResultSet có chứa các giá trị khóa được tạo tự động.
Nếu bạn bao gồm Câu lệnh. RETURN_GENERATED_KEYS , loại dữ liệu của các khóa được tạo tự động trong ResultSet là DECIMAL, bất kể loại dữ liệu của .
Thí dụ
Đoạn mã sau tạo một bảng có cột nhận dạng, chèn một hàng vào bảng và truy xuất giá trị khóa được tạo tự động cho cột nhận dạng. Các số ở bên phải của các câu lệnh đã chọn tương ứng với các bước được mô tả trước đó.
import java.sql.*;
import java.math.*;
import com.ibm.db2.jcc.*;
Connection con;
Statement stmt;
ResultSet rs;
java.math.BigDecimal iDColVar;
…
stmt = con.createStatement[]; // Create a Statement object
stmt.executeUpdate[
"CREATE TABLE EMP_PHONE [EMPNO CHAR[6], PHONENO CHAR[4], " +
"IDENTCOL INTEGER GENERATED ALWAYS AS IDENTITY]"];
// Create table with identity column
stmt.executeUpdate["INSERT INTO EMP_PHONE [EMPNO, PHONENO] " + 1
"VALUES ['000010', '5555']", // Insert a row
Statement.RETURN_GENERATED_KEYS]; // Indicate you want automatically
// generated keys
rs = stmt.getGeneratedKeys[]; // Retrieve the automatically 2
// generated key value in a ResultSet.
// Only one row is returned.
// Create ResultSet for query
while [rs.next[]] {
java.math.BigDecimal idColVar = rs.getBigDecimal[1];
// Get automatically generated key
// value
System.out.println["automatically generated key value = " + idColVar];
}
rs.close[]; // Close ResultSet
stmt.close[]; // Close Statement