吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3659|回复: 15
收起左侧

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

[复制链接]
chen180 发表于 2018-10-31 23:33
前提:
手头有一份我们班的资料,然后要供大家随时查到各自的消息。需要存入到数据库供使用。,于是手写了几段代码,哪里可以优化,希望各位大佬指点。
1.png
创建学生对象:
[Java] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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();
				}
			}
		}
	}
}

数据库表中数据.png

maven依赖:
[HTML] 纯文本查看 复制代码
<!-- [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>


免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
wzs1998 + 1 热心回复!
smnra + 1 + 1 我看了一下你们班的女生人数 &amp;lt;= 5
iceboy + 1 + 1 楼主这个到java 什么水平了,初级水平有了吗?

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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行代码搞定。后期建议你多看看一些工具类的源码,这对你的微观架构能力有所提高。

大佬,求提示///。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表