JDBC插入記錄語法及案例
一、JDBC插入記錄語法
在JDBC中,插入記錄主要通過執行SQL的INSERT語句來實現。其基本語法如下:
INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);
- 表名:需要插入記錄的表的名稱。
- 列1, 列2, …, 列n:指定要插入數據的列名。如果插入的數據包含表中所有列的值,并且順序與表中列的順序一致,那么列名可以省略。
- 值1, 值2, …, 值n:對應于各列要插入的具體值。數據類型需要與列的數據類型相匹配。
二、案例代碼
以下是一個使用JDBC插入記錄的Java案例代碼:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JdbcInsertExample {public static void main(String[] args) {// 數據庫連接信息String url = "jdbc:mysql://localhost:3306/testdb"; // 數據庫URL,testdb為數據庫名String username = "root"; // 數據庫用戶名String password = "123456"; // 數據庫密碼// 要插入的數據String name = "張三";int age = 25;String email = "zhangsan@example.com";// SQL插入語句String sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?)";// 加載數據庫驅動try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}// 建立數據庫連接try (Connection conn = DriverManager.getConnection(url, username, password);// 使用PreparedStatement來執行SQL語句,提高安全性和效率PreparedStatement pstmt = conn.prepareStatement(sql)) {// 設置SQL語句中的參數pstmt.setString(1, name);pstmt.setInt(2, age);pstmt.setString(3, email);// 執行插入操作int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {System.out.println("記錄插入成功!");} else {System.out.println("記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}
代碼說明:
- 導入相關包:導入了
java.sql
包下的Connection
、DriverManager
、PreparedStatement
和SQLException
等類,這些是JDBC編程中常用的類。 - 數據庫連接信息:定義了數據庫的URL、用戶名和密碼,用于建立數據庫連接。
- 要插入的數據:定義了要插入的用戶信息,包括姓名、年齡和郵箱。
- SQL插入語句:定義了插入記錄的SQL語句,使用了占位符
?
來代替具體的值,這是為了使用PreparedStatement
來設置參數,提高安全性和效率。 - 加載數據庫驅動:通過
Class.forName
方法加載MySQL的JDBC驅動,如果驅動加載失敗會捕獲異常并輸出錯誤信息。 - 建立數據庫連接:使用
DriverManager.getConnection
方法建立數據庫連接,并通過try-with-resources
語句來自動關閉連接和PreparedStatement
,避免資源泄露。 - 設置SQL語句中的參數:通過
PreparedStatement
的setXxx
方法(如setString
、setInt
等)來設置SQL語句中的參數,將具體的值賦給占位符。 - 執行插入操作:調用
PreparedStatement
的executeUpdate
方法來執行插入操作,該方法返回一個整數,表示受影響的行數。如果受影響的行數大于0,說明記錄插入成功,否則插入失敗,并輸出相應的提示信息。 - 異常處理:捕獲
SQLException
異常,如果數據庫操作過程中出現異常,會輸出異常信息和錯誤提示。
通過以上代碼,你可以實現將一條記錄插入到數據庫的users
表中。在實際使用中,需要根據具體的數據庫環境和表結構進行相應的調整。
當然可以。以下是一些具體的不同場景下的JDBC插入記錄案例。
案例一:插入單條記錄到學生表
假設有一個學生表students
,表結構如下:
字段名 | 數據類型 |
---|---|
id | int |
name | varchar |
gender | varchar |
score | int |
SQL表創建語句
CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),gender VARCHAR(10),score INT
);
Java代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class InsertStudent {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO students (name, gender, score) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, "李四");pstmt.setString(2, "男");pstmt.setInt(3, 85);int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {System.out.println("學生記錄插入成功!");} else {System.out.println("學生記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}
案例二:批量插入多條記錄到商品表
假設有一個商品表products
,表結構如下:
字段名 | 數據類型 |
---|---|
id | int |
name | varchar |
price | double |
stock | int |
SQL表創建語句
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),price DOUBLE,stock INT
);
Java代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchInsertProducts {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO products (name, price, stock) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql)) {// 批量添加數據pstmt.setString(1, "蘋果");pstmt.setDouble(2, 5.5);pstmt.setInt(3, 100);pstmt.addBatch();pstmt.setString(1, "香蕉");pstmt.setDouble(2, 3.0);pstmt.setInt(3, 150);pstmt.addBatch();pstmt.setString(1, "橙子");pstmt.setDouble(2, 4.0);pstmt.setInt(3, 80);pstmt.addBatch();// 執行批量插入int[] affectedRows = pstmt.executeBatch();if (affectedRows.length > 0) {System.out.println("商品記錄批量插入成功,共插入" + affectedRows.length + "條記錄!");} else {System.out.println("商品記錄批量插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}
案例三:插入記錄并獲取自增主鍵
假設有一個訂單表orders
,表結構如下:
字段名 | 數據類型 |
---|---|
id | int |
user_id | int |
amount | double |
status | varchar |
SQL表創建語句
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,amount DOUBLE,status VARCHAR(20)
);
Java代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InsertOrderAndGetId {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO orders (user_id, amount, status) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) {pstmt.setInt(1, 1);pstmt.setDouble(2, 200.0);pstmt.setString(3, "待支付");int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {try (ResultSet rs = pstmt.getGeneratedKeys()) {if (rs.next()) {int orderId = rs.getInt(1);System.out.println("訂單記錄插入成功,生成的訂單ID為:" + orderId);}}} else {System.out.println("訂單記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}
代碼說明:
- 獲取自增主鍵:在
prepareStatement
方法中傳入PreparedStatement.RETURN_GENERATED_KEYS
參數,表示在執行插入操作后返回生成的主鍵。 - 獲取生成的主鍵:通過
getGeneratedKeys
方法獲取一個ResultSet
,從中可以獲取生成的主鍵值。
以上三個案例分別展示了插入單條記錄、批量插入記錄以及插入記錄并獲取自增主鍵的常見場景,你可以根據實際需求進行參考和修改。