今天使用Excel导入到数据库
但是要进行批量插入, 使用的是JDBC的方式进行的,可是就是在事务处理的时候没有成功,
我在网上找了一些资料,这次又是使用Hibernate的回调机制。成功了!
分享一下~
Hibernate中的Dao层的代码:
package teach.dao.adminpart;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class StudentCourseBatchDaoImp extends HibernateDaoSupport implements
StudentCourseBatchDao {
/*
*
* JDBC API 方式处理
*
*
*/
public void addTeacherCourseByBatch(final String excelPath,
final String courseid, final Integer grade, final Integer term)
throws SQLException, FileNotFoundException, IOException {
/*
*
* 批量添加学生成绩的语句
*
* 绕过Hibernate的API来处理
*
* 采用JDBC的API 来处理
*
* 1、修改方法的前缀,使方法绕过Spring的声明式事务( 经过测试,这里Spring的事务没有作用了 )
* 2、通过session获取事务,不过该事务无法成功启动。
*
* 3、不如手启动JDBC的事务。
*/
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
HSSFWorkbook workBook;
int rowsLength = 0;
HSSFSheet sheet = null;
try {
workBook = new HSSFWorkbook(new FileInputStream(excelPath));
sheet = workBook.getSheet("Sheet1");// 取Excel的第一页就可以了。
rowsLength = sheet.getPhysicalNumberOfRows(); // 获取行数.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String studentid;
int mark;
java.sql.Date year = new java.sql.Date(new java.util.Date()
.getTime()); // 使用那个java.sql.Date
Connection conn = session.connection();
String sql = "insert into studentcourse(studentid,courseid,mark,remark,stage,grade,term,year)"
+ " values(?,?,?,?,?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql);
for (int i = 1; i < rowsLength; i++) {
HSSFRow row = sheet.getRow(i);
if (null != row) {
HSSFCell cell_0 = row.getCell((short) 0);
studentid = cell_0.getStringCellValue();
HSSFCell cell_2 = row.getCell((short) 2);
mark = (int) cell_2.getNumericCellValue();
stmt.setString(1, studentid);
stmt.setString(2, courseid);
stmt.setInt(3, mark);
stmt.setInt(4, 0);
stmt.setInt(5, 2);
stmt.setInt(6, grade);
stmt.setInt(7, term);
stmt.setDate(8, year);
stmt.addBatch();
}
stmt.executeBatch();
}
return null;
}
});
}
}
要看到它有点难度啊,因为我加入了Apache项目下的POI 读取Excel文件,这样大家应该清楚一些了吧!!
分享到:
相关推荐
- **编写业务代码**:使用Hibernate的Session接口进行数据的CRUD操作,而ShardingJDBC会在背后透明地处理分片逻辑,确保数据正确路由到相应的数据库实例。 - **测试和优化**:运行应用,进行单元测试和集成测试,...
《Hibernate3.jar与API详解》 Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者在处理数据库操作时的得力助手。本篇将深入探讨Hibernate3.jar及其API,帮助开发者更好地理解和运用这个库。 一、...
JDBC与Hibernate的比较 第二章 Hibernate API 目标: Hibernate API简介 在java应用hibernate步骤 Hibernate 配置文件 持久化类 创建对象-关系映射文件 ID Sessin 接口 Hibernate对象的生命周期 ..............
3. 数据库交互:Hibernate通过JDBC进行数据库操作,`org.hibernate.engine.jdbc`包下包含了对JDBC的封装。例如,ConnectionProvider负责数据库连接的获取和释放,而StatementExecutor处理SQL执行。 4. 查询机制:...
hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档
5. **JDBC(Java Database Connectivity)**:虽然数据库驱动提供了与数据库的直接连接,但Hibernate还需要如jdbc-api.jar这样的JDBC接口库来实现数据库操作的标准化。 6. **其他依赖**:压缩包中可能还包括其他...
在本文中,我们将深入探讨如何将Spring Boot框架与Hibernate ORM集成,特别是在不使用JPA(Java Persistence API)的情况下。Spring Boot以其便捷的自动配置和简化Java应用开发而广受欢迎,而Hibernate作为Java领域...
4. **jta.jar**: 为了支持分布式事务处理,Hibernate依赖于Java Transaction API(JTA),这个库提供了必要的接口和实现。 **二、安装与配置** 在Java项目中使用Hibernate5.0.7,首先需要将这些jar包添加到项目的...
Hibernate支持JTA(Java Transaction API)和JDBC事务管理。通过Transaction接口,可以方便地开始、提交、回滚事务,确保数据操作的原子性。 八、性能优化 在Hibernate 5.1.16.Final中,对查询性能进行了优化,如...
Hibernate5是Java开发中的一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库事务,而无需直接编写SQL语句。本讲义主要涵盖了Hibernate5的基础知识,...
3. **JTA支持**:对于分布式事务处理,Hibernate 3.6.6可能包含`jta.jar`,提供Java Transaction API支持,使应用程序能够在多个资源之间协调事务。 4. **持久化层接口**:Hibernate使用Java Persistence API(JPA...
总的来说,“spring+mvc+hibernate”整合提供了一个强大且灵活的后端架构,能够高效地处理 Web 请求并与数据库进行交互。通过 Spring 的 IoC 容器和 AOP 支持,我们可以构建松散耦合、可测试的代码。而 Hibernate 则...
7. **事务管理**:Hibernate提供了对JTA(Java Transaction API)和JDBC事务的支持,可以方便地进行事务控制。 8. **事件监听器**:Hibernate允许注册事件监听器,如`PreUpdateEventListener`和`...
DAO(Data Access Object)层是软件设计模式中的一个重要概念,主要用于处理数据访问,通常与ORM框架如Hibernate一起使用,以隔离业务逻辑和数据存储之间的交互。 在给定的代码片段中,`HibernateDAO` 类是用来封装...
- 使用Hibernate API操作数据库:通过Configuration创建SessionFactory,再通过SessionFactory创建Session,然后使用Session进行数据操作。 7. HQL(Hibernate Query Language):是Hibernate提供的面向对象的查询...
最新springboot2基础hiberante5完整项目,打包jar,运行jsp,包括后台与前台,拦截器,登录,后台下载就可以使用,注意不是jpa,里面有完整Dao,千万级数据项目分离的代码,为了适合老项目开发特意集成hiberante5....
【标题】"黑马程序员 hibernate 2017版讲义资料-day2"涉及的是Java领域中的ORM框架Hibernate的学习资源,主要聚焦于2017年的版本。Hibernate是一个开源的Java库,它允许开发者将数据库操作与Java对象进行映射,从而...
3. Session:它是 Hibernate 的工作单元,用于执行 CRUD 操作,提供了事务管理、对象缓存等功能。 【API 接口】 1. Configuration:初始化和配置 Hibernate 环境,读取配置文件并生成 SessionFactory。 2. ...
在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...
在Hibernate中,事务处理是通过Session来完成的。可以使用Transaction API来管理事务的开始、提交和回滚。 ```java Transaction tx = session.beginTransaction(); // 执行数据库操作 tx.commit(); ``` 总结,...