读取excel内容到数据库

本文介绍如何使用Java程序将Excel文件中的科研学科数据批量导入到MySQL数据库中,并提供了完整的代码示例及数据库表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个小项目遇到一个问题,对于一个科研学科,分为一级学科和二级学科,且这些数据都是放在一个excel文件中。数据量接近900行,如果手工录入肯定会疯掉,说不定还会录错,既然咱是程序猿吐舌头肯定不用自己去干这么傻的事。网上溜达了一下找到一个解决方案。


1、首先到网上去找一个jxl.jar的jar包,加入到项目中。(注意一点:此jar包不支持excel2007+版本)

2、将要读取的资源放到硬盘上容易找到的地方,为了方便我就放在D盘下了。

3、加入数据库连接jar包,写一个数据库管理类

DBManager:

package com.akwolf.transform; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBManager { private String url = "jdbc:mysql://localhost:3306/mytest"; private volatile static DBManager dbManger; private Connection conn ; private DBManager(){ } public static DBManager getInstance() { if (dbManger == null) { synchronized (DBManager.class) { if (dbManger == null) { try { Class.forName("com.mysql.jdbc.Driver") ; } catch (ClassNotFoundException e) { e.printStackTrace(); } dbManger = new DBManager(); } } } return dbManger; } public Connection getConnection() { try { conn = DriverManager.getConnection(url, "zhangh", "123456"); } catch (SQLException e) { e.printStackTrace(); } return conn; } public void realse(){ if(conn!=null){ try { conn.close() ; } catch (SQLException e) { e.printStackTrace(); } } } }

4、ok,现在就来进入主要部分编写转换代码

package com.akwolf.transform; import java.io.File; import java.sql.Connection; import java.sql.Statement; import jxl.Sheet; import jxl.Workbook; /** * 读取Excel到数据库 * * @author zhanghua * */ public class TransformExcel { public static void main(String[] args) throws Exception { File file = new File("D:" + File.separator + "subject.xls"); //取得一个可以操作的excel Workbook workbook = Workbook.getWorkbook(file); Sheet[] sheet = workbook.getSheets(); Connection conn = DBManager.getInstance().getConnection();// 取得连接 TransformExcel excel = new TransformExcel(); String sn = "", intro = "", sql = "", firstSn = ""; boolean insert = true; //是否向数据库中插入数据,若一行数据为空据不进行插入 for (int x = 0; x < sheet.length; x++) { for (int y = 0; y < sheet[x].getRows(); y++) { boolean first = false; for (int z = 0; z < sheet[x].getColumns(); z++) { String content = sheet[x].getCell(z, y).getContents(); // 本行为空 if (z == 0 && content.equals("")) { insert = false; break; } // 如果是一级学科 if (content.length() == 3 && z == 0) { firstSn = content; first = true; } //设置每列的数据库 if (z == 0) { sn = content; } else if (z == 1) { intro = content; } } //拼装sql语句 if (first) { sql = "insert into firstsubject(first_subject_id,first_subject_name) values('" + sn + "','" + intro + "')"; first = false; } else { sql = "insert into secondsubject(second_subject_id,second_subject_name,first_subject_id) values('" + sn + "','" + intro + "','" + firstSn + "')"; } //是否可以插入到数据库 if (insert) { excel.insertIntoDB(conn, sql); }else{ insert = true; } } } DBManager.getInstance().realse(); } public void insertIntoDB(Connection conn, String sql) throws Exception { Statement stmt = conn.createStatement(); stmt.executeUpdate(sql); stmt.close(); } }
5、贴上数据库建表语句

set foreign_key_checks=0; create table if not exists firstsubject ( first_subject_id varchar(100) not null, -- 一级学科主键 first_subject_name varchar(255) null, -- 一级学科名称 isdel bit(1) default b'0', -- defautlt 0,删除标记位 balance int(11) null, -- 排序 primary key (first_subject_id) ); create table if not exists secondsubject ( second_subject_id varchar(100) not null, -- 二级学科主键 second_subject_name varchar(255) null, -- 二级学科名称 first_subject_id varchar(100) not null, -- 关联firstsubject.first_subject_id isdel bit(1) default b'0', -- defautlt 0,删除标记位 balance int(11) null, -- 排序 primary key (second_subject_id), key first_second_fk (first_subject_id), constraint first_second_fk foreign key (first_subject_id) references firstsubject (first_subject_id) on delete cascade on update cascade );

看一下运行结果:


好了这个小demo完成了,希望可以帮到大家!!

所有用到的素材都打包好了,有需要的同学可以自己去下载。

http://download.youkuaiyun.com/detail/akwolf/3636901


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值