纯手写利用poi读取xls文件,并通过JDBC存入MySQL数据库

本文介绍了一种使用Java从Excel文件批量读取学生信息,并将其导入MySQL数据库的方法。通过Apache POI库解析Excel表格,逐行读取数据,创建Student对象,最后将这些对象的数据插入到数据库中。

前提:
手头有一份我们班的资料,然后要供大家随时查到各自的消息。需要存入到数据库供使用。,于是手写了几段代码,哪里可以优化,希望各位大佬指点。
 
创建学生对象:

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

package com.cn.poi.xieyi;

 

public class Student {

     

    private String gender;

    private String className;

    private String address;

    private String telNum;

    private String IDNum;

    private String  xuehao;

    private String name;

     

    public String getXuehao() {

        return xuehao;

    }

    public void setXuehao(String xuehao) {

        this.xuehao = xuehao;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getGender() {

        return gender;

    }

    public void setGender(String gender) {

        this.gender = gender;

    }

    public String getClassName() {

        return className;

    }

    public void setClassName(String className) {

        this.className = className;

    }

    public String getAddress() {

        return address;

    }

    public void setAddress(String address) {

        this.address = address;

    }

    public String getTelNum() {

        return telNum;

    }

    public void setTelNum(String telNum) {

        this.telNum = telNum;

    }

    public String getIDNum() {

        return IDNum;

    }

    public void setIDNum(String iDNum) {

        IDNum = iDNum;

    }

    @Override

    public String toString() {

        return "Student [gender=" + gender + ", className=" + className

                + ", address=" + address + ", telNum="

                + telNum + ", IDNum=" + IDNum + ", xuehao=" + xuehao

                + ", name=" + name + "]";

    }

     

     

     

     

     

     

     

 

}




------------------------
--------------------

然后主代码,很混乱,因为是自己看,写的超级乱。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

[Java] 纯文本查看 复制代码

?

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

package com.cn.poi.xieyi;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.ss.usermodel.Cell;

 

public class Main {

    private static POIFSFileSystem fs;//poi文件流

    private static HSSFWorkbook wb;//获得execl

    private static HSSFRow row;//获得行

    private static HSSFSheet sheet;//获得工作簿

 

     

     

    public static void main(String[] args) throws Exception {

        //加载文件的位置

        InputStream in= new FileInputStream("D:\\笔记\\15机电工程协议书号.xls");

         

        readXlsx(in);

         

    }

     

    public static void readXlsx(InputStream in){

         

        List<Student> list = new ArrayList<>();

         

        try {

             fs = new POIFSFileSystem(in);

             wb = new HSSFWorkbook(fs);

             sheet=wb.getSheetAt(0);

             //int rowfirst=sheet.getFirstRowNum();

             int rowend=sheet.getLastRowNum();//获取最后一行

              

             /**

              * 获取每一行

              */

             for (int i = 0; i <=rowend; i++) {

                row=sheet.getRow(i);

                 

                 

               // int colNum = row.getPhysicalNumberOfCells();//一行总列数

                Student s = new Student();

                for(int j = 0; j<11;j++){

                    if( row.getCell(j) != null){

                        row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);

                        String xuehao = row.getCell(j).getStringCellValue();

                         

                        /**

                         * 根据每次循环获取到的内容不同,设置给student对象的各个属性

                         */

                        switch (j) {

                        case 2:

                            s.setXuehao(xuehao);

                            break;

                        case 3:

                            s.setName(xuehao);

                        case 4:

                            s.setGender(xuehao);

                        case 5 :

                            s.setClassName(xuehao);

                        case 6 :

                            s.setAddress(xuehao);

                        case 8 :

                            s.setTelNum(xuehao);

                        case 9 :

                            s.setIDNum(xuehao);

                        }

                    }

                }

                System.out.println(s);

                 

                /**

                 * 发送到数据库

                 */

                send(s);

                 

                //添加到list中方便后续使用

                //list.add(s);

            }

          }catch (Exception e) {

             e.printStackTrace();

         }

    }

     

    /**

     * 发送数据库的实现方法

     * @param s

     */

    public static void send(Student s) {

         

        String sql = "insert into student (xuehao,name,gender,class_name,address,tel_num,ID_card) values (?,?,?,?,?,?,?)";

        Connection conn =null;

        PreparedStatement pstmt = null;

        //加载驱动

        try {

            Class.forName("com.mysql.jdbc.Driver") ;

             String url = "jdbc:mysql://localhost:3306/student_list" ;   

             String username = "root" ;  

             String password = "root" ;  

             

            //连接数据库

            conn = DriverManager.getConnection(url , username , password ) ;

            pstmt = conn.prepareStatement(sql);

            

            //设置参数

            pstmt.setString(1, s.getXuehao());

            pstmt.setString(2, s.getName());

            pstmt.setString(3, s.getGender());

            pstmt.setString(4, s.getClassName());

            pstmt.setString(5, s.getAddress());

            pstmt.setString(6, s.getTelNum());

            pstmt.setString(7, s.getIDNum());

             

            //执行sql被影响的条数

           // int i = pstmt.executeUpdate();

             

           // System.out.println(i);

             

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

            //关闭一些东西

            if(pstmt != null){

                try {

                    pstmt.close();

                    if(conn != null){

                        conn.close();

                    }

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}


 

maven依赖:

[HTML] 纯文本查看 复制代码

?

文章来源:http://www.35cm.com/thread-161-1-1.html
35cm.com

 

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

<!-- [url]https://mvnrepository.com/artifact/org.apache.poi/poi[/url]

 

[url]http://www.35cm.com/thread-161-1-1.html[/url]

-->

    <dependency>

        <groupId>org.apache.poi</groupId>

        <artifactId>poi</artifactId>

        <version>3.17</version>

    </dependency>

     

     

     

    <!-- [url]https://mvnrepository.com/artifact/org.testcontainers/mysql[/url] -->

     

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

        <version>5.1.23</version>

    </dependency>

  </dependencies>

好的,下面是一个使用Spring Boot和POI读取xlsx文件将数据存入MySQL数据库的示例代码,附有详细注释: 首先,需要在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> ``` 接着,创建一个实体类,用于存储读取的数据。示例代码如下: ```java public class Employee { private String name; private int age; private String gender; private String department; // 省略getter和setter方法 } ``` 然后,创建一个Service类,用于读取xlsx文件将数据存入MySQL数据库。示例代码如下: ```java @Service public class EmployeeService { @Autowired private JdbcTemplate jdbcTemplate; public void readExcelFile(String filePath) throws IOException { // 创建一个输入流,读取Excel文件 FileInputStream inputStream = new FileInputStream(filePath); // 创建一个Workbook对象,表示整个Excel文件 Workbook workbook = new XSSFWorkbook(inputStream); // 获取第一个Sheet页 Sheet sheet = workbook.getSheetAt(0); // 遍历Sheet页中的每一行数据 for (Row row : sheet) { // 跳过第一行表头 if (row.getRowNum() == 0) { continue; } // 创建一个Employee对象,用于存储当前行的数据 Employee employee = new Employee(); // 遍历当前行中的每一个单元格数据 for (Cell cell : row) { switch (cell.getColumnIndex()) { case 0: employee.setName(cell.getStringCellValue()); break; case 1: employee.setAge((int) cell.getNumericCellValue()); break; case 2: employee.setGender(cell.getStringCellValue()); break; case 3: employee.setDepartment(cell.getStringCellValue()); break; default: break; } } // 将Employee对象中的数据插入到MySQL数据库jdbcTemplate.update("INSERT INTO employee(name, age, gender, department) VALUES (?, ?, ?, ?)", employee.getName(), employee.getAge(), employee.getGender(), employee.getDepartment()); } // 关闭输入流和Workbook对象 inputStream.close(); workbook.close(); } } ``` 最后,创建一个Controller类,用于接收上传的xlsx文件调用Service类的方法读取存储数据。示例代码如下: ```java @RestController public class EmployeeController { @Autowired private EmployeeService employeeService; @PostMapping("/upload") public void uploadFile(@RequestParam("file") MultipartFile file) throws IOException { // 保存上传的文件到本地 String filePath = "D:/upload/" + file.getOriginalFilename(); file.transferTo(new File(filePath)); // 调用Service类的方法读取存储数据 employeeService.readExcelFile(filePath); } } ``` 以上就是一个使用Spring Boot和POI读取xlsx文件将数据存入MySQL数据库的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值