[Add] logics to insert from excel files into sqlite database

This commit is contained in:
tiennm99 committed 2023-11-13 23:22:59 +07:00
1 parent 2d2850f20f
commit cee9df9f1a
5 files changed
+131 -25

No files matched your search

+2 -10
View File
@@ -12,20 +12,12 @@ repositories {
dependencies {
annotationProcessor("org.projectlombok:lombok:1.18.30")
compileOnly("org.projectlombok:lombok:1.18.30")
implementation("com.h2database:h2:2.2.224")
implementation("org.apache.logging.log4j:log4j-core:2.21.1")
implementation("org.apache.logging.log4j:log4j-slf4j2-impl:2.21.1")
implementation("org.apache.poi:poi:5.2.4")
implementation("org.apache.poi:poi-ooxml:5.2.4")
implementation("org.hibernate.orm:hibernate-community-dialects:6.3.1.Final")
implementation("org.hibernate.orm:hibernate-core:6.3.1.Final")
implementation("org.slf4j:slf4j-api:2.0.9")
testAnnotationProcessor("org.projectlombok:lombok:1.18.30")
testCompileOnly("org.projectlombok:lombok:1.18.30")
testImplementation(platform("org.junit:junit-bom:5.9.1"))
testImplementation("org.junit.jupiter:junit-jupiter")
}
tasks.test {
useJUnitPlatform()
implementation("org.xerial:sqlite-jdbc:3.43.2.2")
}
Binary file not shown.
@@ -1,32 +1,145 @@
package dev.miti99.thptqg2017;
import dev.miti99.thptqg2017.entity.Student;
import java.io.FileInputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.cfg.Configuration;
@Slf4j
public class Converter {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private static final String excelFolder = "src/main/resources/raw";
private static final Pattern toanPattern = Pattern.compile("Toán:\\s*(\\d*.\\d*)");
private static final Pattern nguVanPattern = Pattern.compile("Ngữ văn:\\s*(\\d*.\\d*)");
private static final Pattern vatLiPattern = Pattern.compile("Vật lí:\\s*(\\d*.\\d*)");
private static final Pattern hoaHocPattern = Pattern.compile("Hóa học:\\s*(\\d*.\\d*)");
private static final Pattern sinhHocPattern = Pattern.compile("Sinh học:\\s*(\\d*.\\d*)");
private static final Pattern khtnPattern = Pattern.compile("KHTN:\\s*(\\d*.\\d*)");
private static final Pattern lichSuPattern = Pattern.compile("Lịch sử:\\s*(\\d*.\\d*)");
private static final Pattern diaLiPattern = Pattern.compile("Địa lí:\\s*(\\d*.\\d*)");
private static final Pattern gdcdPattern = Pattern.compile("GDCD:\\s*(\\d*.\\d*)");
private static final Pattern khxhPattern = Pattern.compile("KHXH:\\s*(\\d*.\\d*)");
private static final Pattern tiengAnhPattern = Pattern.compile("Tiếng Anh:\\s*(\\d*.\\d*)");
public static void main(String[] args) {
var configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
try (var sessionFactory = configuration.buildSessionFactory();
var session = sessionFactory.openSession()) {
var session = sessionFactory.openSession();
var paths = Files.walk(Path.of(excelFolder))) {
var transaction = session.beginTransaction();
var newStudent = new Student();
newStudent.setSoBaoDanh(12345);
newStudent.setHoTen("John Doe");
newStudent.setNgaySinh(dateFormat.parse("01/01/1999"));
paths
.filter(Files::isRegularFile)
.forEach(
file -> {
try (var workbook = new XSSFWorkbook(new FileInputStream(file.toFile()))) {
var sheet = workbook.getSheetAt(0);
session.merge(newStudent);
for (var row : sheet) {
try {
// Một số file lỗi nên không chắc có header, không skip
// if (row.getRowNum() == 0) {
// return;
// }
var student = new Student();
var hoTen = row.getCell(0).getStringCellValue();
student.setHoTen(hoTen);
var ngaySinh = row.getCell(1).getStringCellValue();
student.setNgaySinh(dateFormat.parse(ngaySinh));
var soBaoDanh = row.getCell(2).getStringCellValue();
student.setSoBaoDanh(soBaoDanh);
var diemThi = row.getCell(3).getStringCellValue();
var toanMatcher = toanPattern.matcher(diemThi);
if (toanMatcher.find()) {
var toan = Double.parseDouble(toanMatcher.group(1));
student.setToan(toan);
}
var nguVanMatcher = nguVanPattern.matcher(diemThi);
if (nguVanMatcher.find()) {
var nguVan = Double.parseDouble(nguVanMatcher.group(1));
student.setNguVan(nguVan);
}
var vatLiMatcher = vatLiPattern.matcher(diemThi);
if (vatLiMatcher.find()) {
var vatLi = Double.parseDouble(vatLiMatcher.group(1));
student.setVatLy(vatLi);
}
var hoaHocMatcher = hoaHocPattern.matcher(diemThi);
if (hoaHocMatcher.find()) {
var hoaHoc = Double.parseDouble(hoaHocMatcher.group(1));
student.setHoaHoc(hoaHoc);
}
var sinhHocMatcher = sinhHocPattern.matcher(diemThi);
if (sinhHocMatcher.find()) {
var sinhHoc = Double.parseDouble(sinhHocMatcher.group(1));
student.setSinhHoc(sinhHoc);
}
var khtnMatcher = khtnPattern.matcher(diemThi);
if (khtnMatcher.find()) {
var khtn = Double.parseDouble(khtnMatcher.group(1));
student.setKhtn(khtn);
}
var lichSuMatcher = lichSuPattern.matcher(diemThi);
if (lichSuMatcher.find()) {
var lichSu = Double.parseDouble(lichSuMatcher.group(1));
student.setLichSu(lichSu);
}
var diaLiMatcher = diaLiPattern.matcher(diemThi);
if (diaLiMatcher.find()) {
var diaLi = Double.parseDouble(diaLiMatcher.group(1));
student.setDiaLy(diaLi);
}
var gdcdMatcher = gdcdPattern.matcher(diemThi);
if (gdcdMatcher.find()) {
var gdcd = Double.parseDouble(gdcdMatcher.group(1));
student.setGdcd(gdcd);
}
var khxhMatcher = khxhPattern.matcher(diemThi);
if (khxhMatcher.find()) {
var khxh = Double.parseDouble(khxhMatcher.group(1));
student.setKhxh(khxh);
}
var tiengAnhMatcher = tiengAnhPattern.matcher(diemThi);
if (tiengAnhMatcher.find()) {
var tiengAnh = Double.parseDouble(tiengAnhMatcher.group(1));
student.setTiengAnh(tiengAnh);
}
session.merge(student);
} catch (Exception e) {
log.error("Error", e);
}
}
} catch (Exception e) {
log.error("Error", e);
}
});
transaction.commit();
} catch (Exception e) {
log.error("Exception occurred", e);
log.error("Error", e);
}
}
}
@@ -14,14 +14,14 @@ import lombok.Data;
@Data
public class Student {
@Id
@Column(name = "SOBAODANH")
private int soBaoDanh;
@Column(name = "SO_BAO_DANH")
private String soBaoDanh;
@Column(name = "HO_TEN")
private String hoTen;
@Column(name = "NGAY_SINH")
@Temporal(TemporalType.TIMESTAMP)
@Temporal(TemporalType.DATE)
private Date ngaySinh;
@Column(name = "TOAN")
+6 -5
View File
@@ -5,13 +5,14 @@
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:./database</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.driver_class">org.sqlite.JDBC</property>
<property name="hibernate.connection.url">jdbc:sqlite:database.sqlite</property>
<property name="hibernate.dialect">org.hibernate.community.dialect.SQLiteDialect</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="show_sql">false</property>
<mapping class="dev.miti99.thptqg2017.entity.Student" />
</session-factory>