java中xlsx导入mysql_java 实现excel中的数据导入到数据库表的功能(简单版)

项目框架

1,后台:spring+springmvc+mybatis

2,前台: bootstrap+jquery+ajax

3,项目管理:maven

说明.excel处理函数需要引入poi的jar包,在pom.xml引入一下代码

org.apache.poi

poi

3.8

commons-codec

commons-codec

org.apache.poi

poi-ooxml

3.8

别的框架大体上也是可以的,只需稍微调整,如有问题,大家可留言讨论

实现的功能说明:将用户信息(姓名,性别,年龄)通过excel上传,并保存到数据库

具体代码如下

1,前台html代码

选择文件

上传

前台页面效果

excel内容展示

2,JS代码

var User = function(){

this.init = function(){

//模拟上传excel

$("#uploadEventBtn").unbind("click").bind("click",function(){

$("#uploadEventFile").click();

});

$("#uploadEventFile").bind("change",function(){

$("#uploadEventPath").attr("value",$("#uploadEventFile").val());

});

};

//点击上传按钮

this.uploadBtn = function(){

var uploadEventFile = $("#uploadEventFile").val();

if(uploadEventFile == ''){

alert("请选择excel,再上传");

}else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel

alert("只能上传Excel文件");

}else{

var url = '/user/upload/';

var formData = new FormData($('form')[0]);

user.sendAjaxRequest(url,'POST',formData);

}

};

this.sendAjaxRequest = function(url,type,data){

$.ajax({

url : url,

type : type,

data : data,

success : function(result) {

alert( result);

},

error : function() {

alert( "excel上传失败");

},

cache : false,

contentType : false,

processData : false

});

};

}

var user;

$(function(){

user = new User();

user.init();

});

3,domain层用户的实体类

/**

* @author liuchj

* @version 1.0

*/

public class User {

private String name;

private String sex;

private String age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

}

4,controller层代码

@Controller

@RequestMapping("/user")

public class UserController{

@Autowired

private UserService userService;

@RequestMapping(value="/upload",method = RequestMethod.POST)

@ResponseBody

public String upload(@RequestParam(value="file",required = false)MultipartFile file,HttpServletRequest request, HttpServletResponse response){

Sring result = userService.readExcelFile(file);

return result;

}

}

5,service层代码

1),service层接口

public interface UserService {

/**

* 读取excel中的数据,生成list

*/

String readExcelFile( MultipartFile file);

}

2),service实现层代码

@Service

public class MeetingRoomServiceImpl implements MeetingRoomService {

@Override

public String readExcelFile(MultipartFile file) {

String result ="";

//创建处理EXCEL的类

ReadExcel readExcel=new ReadExcel();

//解析excel,获取上传的事件单

List useList = readExcel.getExcelInfo(file);

//至此已经将excel中的数据转换到list里面了,接下来就可以操作list,可以进行保存到数据库,或者其他操作,

//和你具体业务有关,这里不做具体的示范

if(useList != null && !useList.isEmpty()){

result = "上传成功";

}else{

result = "上传失败";

}

return result;

}

}

3),excel处理函数

/**

* @author liuchj

* @version 1.0

*/

public class ReadExcel {

//总行数

private int totalRows = 0;

//总条数

private int totalCells = 0;

//错误信息接收器

private String errorMsg;

//构造方法

public ReadExcel(){}

//获取总行数

public int getTotalRows() { return totalRows;}

//获取总列数

public int getTotalCells() { return totalCells;}

//获取错误信息

public String getErrorInfo() { return errorMsg; }

/**

* 读EXCEL文件,获取信息集合

* @param fielName

* @return

*/

public List getExcelInfo(MultipartFile mFile) {

String fileName = mFile.getOriginalFilename();//获取文件名

try {

if (!validateExcel(fileName)) {// 验证文件名是否合格

return null;

}

boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本

if (isExcel2007(fileName)) {

isExcel2003 = false;

}

List userList = createExcel(mFile.getInputStream(), isExcel2003);

} catch (Exception e) {

e.printStackTrace();

}

return userList;

}

/**

* 根据excel里面的内容读取客户信息

* @param is 输入流

* @param isExcel2003 excel是2003还是2007版本

* @return

* @throws IOException

*/

public List createExcel(InputStream is, boolean isExcel2003) {

try{

Workbook wb = null;

if (isExcel2003) {// 当excel是2003时,创建excel2003

wb = new HSSFWorkbook(is);

} else {// 当excel是2007时,创建excel2007

wb = new XSSFWorkbook(is);

}

List userList = readExcelValue(wb);// 读取Excel里面客户的信息

} catch (IOException e) {

e.printStackTrace();

}

return userList;

}

/**

* 读取Excel里面客户的信息

* @param wb

* @return

*/

private List readExcelValue(Workbook wb) {

// 得到第一个shell

Sheet sheet = wb.getSheetAt(0);

// 得到Excel的行数

this.totalRows = sheet.getPhysicalNumberOfRows();

// 得到Excel的列数(前提是有行数)

if (totalRows > 1 && sheet.getRow(0) != null) {

this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();

}

List userList = new ArrayList();

// 循环Excel行数

for (int r = 1; r < totalRows; r++) {

Row row = sheet.getRow(r);

if (row == null){

continue;

}

User user = new User();

// 循环Excel的列

for (int c = 0; c < this.totalCells; c++) {

Cell cell = row.getCell(c);

if (null != cell) {

if (c == 0) {

//如果是纯数字,比如你写的是25,cell.getNumericCellValue()获得是25.0,通过截取字符串去掉.0获得25

if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){

String name = String.valueOf(cell.getNumericCellValue());

user.setName(name.substring(0, name.length()-2>0?name.length()-2:1));//名称

}else{

user.setName(cell.getStringCellValue());//名称

}

} else if (c == 1) {

if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){

String sex = String.valueOf(cell.getNumericCellValue());

user.setSex(sex.substring(0, sex.length()-2>0?sex.length()-2:1));//性别

}else{

user.setSex(cell.getStringCellValue());//性别

}

} else if (c == 2){

if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){

String age = String.valueOf(cell.getNumericCellValue());

user.setAge(age.substring(0, age.length()-2>0?age.length()-2:1));//年龄

}else{

user.setAge(cell.getStringCellValue());//年龄

}

}

}

}

// 添加到list

userList.add(user);

}

return userList;

}

/**

* 验证EXCEL文件

*

* @param filePath

* @return

*/

public boolean validateExcel(String filePath) {

if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {

errorMsg = "文件名不是excel格式";

return false;

}

return true;

}

// @描述:是否是2003的excel,返回true是2003

public static boolean isExcel2003(String filePath) {

return filePath.matches("^.+\\.(?i)(xls)$");

}

//@描述:是否是2007的excel,返回true是2007

public static boolean isExcel2007(String filePath) {

return filePath.matches("^.+\\.(?i)(xlsx)$");

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Apache POI 库来解析 Excel 数据,并使用 JDBC 将数据导入数据库。是一个简单Java 代码示: 首先,确保你已经将 POI 和 JDBC 相关的 JAR 文件添加到你的项目。 ```java import java.FileInputStream; import java.sql; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelImporter { public static void main(String[] args) { String excelFilePath = "path/to/your/excel/file.xlsx"; try (FileInputStream inputStream = new FileInputStream(excelFilePath); Workbook workbook = new XSSFWorkbook(inputStream)) { Sheet sheet = workbook.getSheetAt(0); int rowCount = 0; for (Row row : sheet) { if (rowCount == 0) { rowCount++; continue; } String column1 = row.getCell(0).getStringCellValue(); int column2 = (int) row.getCell(1).getNumericCellValue(); // 获取其他列的数据 // 将数据插入数据库 insertToDatabase(column1, column2); rowCount++; } System.out.println("数据导入成功!"); } catch (Exception e) { e.printStackTrace(); } } private static void insertToDatabase(String column1, int column2) { String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, username, password)) { String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, column1); statement.setInt(2, column2); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的示例,你需要将 `path/to/your/excel/file.xlsx` 替换为你实际的 Excel 文件路径。此外,你还需要根据你的数据库设置更新 `url`、`username`、`password`、`your_database` 和 `your_table`。 这个示例假设 Excel 的第一行为标题,从第二行开始是数据。你可以根据需要调整代码以适应不同的格结构。同时,你可以根据你的数据库结构调整 `insertToDatabase()` 方法的 SQL 语句和参数设置。 请确保你已正确引入所需的库和驱动程序,并在执行代码之前设置好数据库连接信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值