chen180 发表于 2018-10-31 23:33

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

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

创建学生对象:
package com.cn.poi.xieyi;

public class Student {
       
        private String gender;
        private String className;
        private String address;
        private String telNum;
        private String IDNum;
        private Stringxuehao;
        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 + "]";
        }
       
       
       
       
       
       
       

}



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

然后主代码,很混乱,因为是自己看,写的超级乱。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
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依赖:
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi

http://www.35cm.com/thread-161-1-1.html
-->
        <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.17</version>
        </dependency>
       
       
       
        <!-- https://mvnrepository.com/artifact/org.testcontainers/mysql -->
       
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.23</version>
        </dependency>
</dependencies>

chen180 发表于 2020-7-30 17:05

reeye 发表于 2018-11-1 09:04
如果仅仅是这份代码, 我感觉应该不算初级.
我理解的初级, 还包含 熟练使用各大框架

对、那时候是刚刚学,都不算初级,就是懂一点基础语法、现在我认为初级起码会spring、mybatis、mvc、并且常见用法用的熟练、那时候我远远是没有这技术的、框架一个也不熟悉!不过还好,没有放弃!现在已经过了初级那个难过的时候了!哈哈!

chen180 发表于 2018-11-1 19:22

lyt0526 发表于 2018-11-1 08:04
还好   不怎么乱   你可以选择用一些框架   比如mybatis   hibernate    就会干净很多

对,之前是做过,这个没有考虑这一点。

heang567 发表于 2018-11-1 05:55

谢谢码农分享!

lyt0526 发表于 2018-11-1 08:04

还好   不怎么乱   你可以选择用一些框架   比如mybatis   hibernate    就会干净很多

iceboy 发表于 2018-11-1 08:20

reeye 发表于 2018-11-1 09:04

iceboy 发表于 2018-11-1 08:20
楼主这个到java 什么水平了,初级水平有了吗?

如果仅仅是这份代码, 我感觉应该不算初级.
我理解的初级, 还包含 熟练使用各大框架

小可爱~ 发表于 2018-11-1 09:07

static void readXlsx(InputStream in) 函数设计有问题, 参数最好别写流, 写文件路径

孤云 发表于 2018-11-1 09:31

最好批量插入,这样插入一条打开一次数据库连接耗时间。

有你便是晴天 发表于 2018-11-1 10:56

建议你使用相关工具,2行代码搞定。后期建议你多看看一些工具类的源码,这对你的微观架构能力有所提高。

chen180 发表于 2018-11-1 19:23

有你便是晴天 发表于 2018-11-1 10:56
建议你使用相关工具,2行代码搞定。后期建议你多看看一些工具类的源码,这对你的微观架构能力有所提高。

大佬,求提示///。。
页: [1] 2
查看完整版本: 纯手写利用poi读取xls文件,并通过JDBC存入MySQL数据库