Java学习教程,从入门到精通,JDBC插入记录语法及案例(104)
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
,从中可以获取生成的主键值。
以上三个案例分别展示了插入单条记录、批量插入记录以及插入记录并获取自增主键的常见场景,你可以根据实际需求进行参考和修改。