java如何向数据库中插入数据
使用JDBC插入数据
JDBC(Java Database Connectivity)是Java连接数据库的标准API。通过JDBC向数据库插入数据需要以下步骤:
-
加载数据库驱动
使用Class.forName()加载数据库驱动类。例如MySQL驱动:Class.forName("com.mysql.jdbc.Driver"); -
建立数据库连接
通过DriverManager.getConnection()获取连接对象:Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb", "username", "password"); -
创建PreparedStatement
使用预编译语句防止SQL注入:String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); -
设置参数并执行
绑定参数并执行更新:pstmt.setString(1, "张三"); pstmt.setInt(2, 25); int rows = pstmt.executeUpdate(); -
关闭资源
在finally块中关闭连接:pstmt.close(); conn.close();
使用JPA/Hibernate插入数据
JPA(Java Persistence API)是ORM框架的标准接口,Hibernate是其流行实现:
-
配置实体类
使用注解定义实体与表的映射:@Entity @Table(name = "users") public class User { @Id @GeneratedValue private Long id; private String name; private Integer age; // getters/setters } -
获取EntityManager
通过持久化单元创建管理实例:EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPU"); EntityManager em = emf.createEntityManager(); -
持久化实体
在事务中保存对象:em.getTransaction().begin(); User user = new User(); user.setName("李四"); user.setAge(30); em.persist(user); em.getTransaction().commit(); -
关闭资源
使用后关闭EntityManager:em.close(); emf.close();
使用Spring Data JPA插入数据
Spring Data JPA进一步简化了持久层操作:
-
定义Repository接口
继承JpaRepository获得CRUD方法:public interface UserRepository extends JpaRepository<User, Long> {} -
自动装配Repository
通过依赖注入使用:@Autowired private UserRepository userRepo; -
保存实体
直接调用save方法:User user = new User(); user.setName("王五"); user.setAge(28); userRepo.save(user);
使用MyBatis插入数据
MyBatis通过XML或注解配置SQL映射:
-
配置Mapper接口
定义插入方法:public interface UserMapper { @Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})") int insert(User user); } -
获取SqlSession
通过工厂创建会话:SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); -
执行插入
获取Mapper并调用方法:UserMapper mapper = session.getMapper(UserMapper.class); mapper.insert(new User("赵六", 35)); session.commit(); -
关闭会话
操作完成后释放资源:session.close();
批量插入优化
当需要插入大量数据时,采用批量操作提升性能:
JDBC批量处理
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement("INSERT...");
for (User user : userList) {
pstmt.setString(1, user.getName());
pstmt.addBatch();
}
int[] counts = pstmt.executeBatch();
conn.commit();
JPA批量配置
在persistence.xml中添加:
<property name="hibernate.jdbc.batch_size" value="50"/>
<property name="hibernate.order_inserts" value="true"/>
事务管理
确保数据一致性需使用事务:
声明式事务(Spring)
在Service层添加注解:
@Transactional
public void addUsers(List<User> users) {
users.forEach(userRepository::save);
}
编程式事务
手动控制事务边界:
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
// 数据库操作
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}






