背景
现在做的体测项目要求将数据库中的数据按照一定的格式导出excel,下面我们就来说说是怎么做到的吧。
在现实生活和商业场景中,数据库和Excel之间的交互是非常常见和重要的。背景可以是以下几种情况:
数据导入和导出: 在许多情况下,数据需要从数据库导出到Excel表格中进行分析、汇总或分享给其他团队成员。同样,有时也需要将Excel中的数据导入到数据库中,以便更好地管理和存储数据。
数据报表和分析: Excel表格通常用于创建各种形式的数据报表和分析,这些报表可能需要从数据库中提取数据,通过Excel的功能进行加工和处理,然后生成漂亮且易读的报表。
临时数据存储: 有时,临时性的数据需要在Excel中进行编辑和处理,例如在会议中记录的信息或者简单的数据计算。这些数据可以先导出到Excel,进行必要的处理和修改,然后再导入回数据库。
非技术人员操作: Excel表格通常更容易被非技术人员使用,因为它提供了直观和友好的界面。在某些情况下,非技术人员可能需要直接与数据进行交互,而不需要使用复杂的数据库管理工具。
备份和还原: Excel表格可以作为数据库数据的备份方式之一。在数据库备份出现问题或者需要还原数据时,可以使用Excel中的备份数据进行恢复。
步骤
原理:
Java读取Excel表、写Excel表和数据库交互的原理如下:
Java读取Excel表原理:
Java通过Apache POI库来读取Excel表格。POI是Apache基金会的一个开源项目,用于处理Microsoft Office格式的文档,包括Excel。Java读取Excel的原理是通过POI库解析Excel文件的二进制格式,将Excel文件转换成Java对象。POI提供了不同的API,如HSSF(处理Excel 97-2003格式)和XSSF(处理Excel 2007格式及以上)来读取Excel文件中的数据。Java开发人员可以使用这些API来读取Excel中的单元格数据、行数据或整个工作表的内容。
Java写Excel表原理:
与读取Excel相反,Java通过Apache POI库来写Excel表格。开发人员可以使用POI库创建新的Excel文件或者修改已有的Excel文件。通过POI的API,可以创建Excel工作簿、工作表、单元格,并设置它们的内容和格式。最后,将Java对象的数据写入Excel文件,并将其保存在磁盘上。
Java与数据库交互原理:
Java与数据库交互主要涉及两个方面:JDBC(Java Database Connectivity)和ORM(对象关系映射)。
JDBC:JDBC是Java提供的一组API,用于与关系型数据库进行交互。通过JDBC,Java应用程序可以连接到数据库,并执行SQL语句来执行增删改查等操作。Java开发人员使用JDBC API来建立数据库连接、创建和执行SQL语句,并处理数据库返回的结果。
ORM:ORM是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库,而无需编写复杂的SQL语句。ORM工具可以将Java对象与数据库表之间建立映射关系,使得开发人员可以直接通过操作Java对象来实现数据库操作。在Java中,Hibernate是最常用的ORM框架之一,它简化了数据库操作,并提供了一系列的API来实现数据的持久化和检索。
综上所述,Java通过Apache POI库实现Excel表的读取和写入,通过JDBC进行与关系型数据库的交互,而通过ORM框架如Hibernate,可以以面向对象的方式操作数据库,提高开发效率和代码可维护性。这些技术使得Java在处理Excel表和数据库交互方面成为一种强大的编程语言。
实现方式:
具体实现demo
import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; 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 excel { //数据库数据导出来 // public static void main(String[] args) { // String jdbcURL = "jdbc:mysql://localhost:3306/test"; // String username = "root"; // String password = "123456"; // String excelFilePath = "C:\\Users\\Administrator\\Desktop\\111.xlsx"; // try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) { // String sql = "SELECT * FROM testTable"; // PreparedStatement statement = connection.prepareStatement(sql); // ResultSet resultSet = statement.executeQuery(); // XSSFWorkbook workbook = new XSSFWorkbook(); // Sheet sheet = workbook.createSheet("Data"); // writeHeaderLine(resultSet, sheet); // writeDataLines(resultSet, workbook, sheet); // FileOutputStream outputStream = new FileOutputStream(excelFilePath); // workbook.write(outputStream); // workbook.close(); // statement.close(); // resultSet.close(); // } catch (Exception e) { // e.printStackTrace(); // } // } // // private static void writeHeaderLine(ResultSet resultSet, Sheet sheet) { // try { // ResultSetMetaData metaData = resultSet.getMetaData(); // int numberOfColumns = metaData.getColumnCount(); // Row headerRow = sheet.createRow(0); // for (int i = 1; i <= numberOfColumns; i++) { // String columnName = metaData.getColumnName(i); // Cell headerCell = headerRow.createCell(i - 1); // headerCell.setCellValue(columnName); // } // } catch (Exception e) { // e.printStackTrace(); // } // } // // private static void writeDataLines(ResultSet resultSet, XSSFWorkbook workbook, Sheet sheet) { // try { // ResultSetMetaData metaData = resultSet.getMetaData(); // int numberOfColumns = metaData.getColumnCount(); // int rowCount = 1; // while (resultSet.next()) { // Row row = sheet.createRow(rowCount++); // for (int i = 1; i <= numberOfColumns; i++) { // Object object = resultSet.getObject(i); // Cell cell = row.createCell(i - 1); // if (object instanceof Integer) { // cell.setCellValue((Integer) object); // } else if (object instanceof Double) { // cell.setCellValue((Double) object); // } else if (object instanceof String) { // cell.setCellValue((String) object); // } else if (object instanceof java.sql.Date) { // cell.setCellValue((java.sql.Date) object); // } else if (object instanceof java.util.Date) { // cell.setCellValue((java.util.Date) object); // } // } // } // } catch (Exception e) { // e.printStackTrace(); // } // } //数据库数据倒上去 public static void main(String[] args) { String jdbcURL = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; String excelFilePath = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\111.xlsx"; try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) { FileInputStream inputStream = new FileInputStream(excelFilePath); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); String sql = "INSERT INTO testTable (id, name, price) VALUES (?, ?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); int rowNumber = 0; for (Row row : sheet) { if (rowNumber == 0) { // Skip the header row rowNumber++; continue; } Cell cell1 = row.getCell(0); String column1 = cell1.getStringCellValue(); Cell cell2 = row.getCell(1); String column2 = cell2.getStringCellValue(); Cell cell3 = row.getCell(2); String column3 = cell3.getStringCellValue(); statement.setString(1, column1); statement.setString(2, column2); statement.setString(3, column3); statement.executeUpdate(); } workbook.close(); statement.close(); connection.close(); System.out.println("Data inserted successfully."); } catch (Exception e) { e.printStackTrace(); } } }
总结
在Java中,Excel表的读取、写入和数据库交互是一种高效、灵活且强大的编程实践。通过Apache POI库,Java可以轻松地解析Excel文件,提取数据并将其转换为可操作的Java对象。这样,开发人员可以轻松处理大量数据,实现复杂的业务逻辑,并为用户提供更加智能和便捷的功能。
而在与数据库交互方面,Java提供了JDBC作为标准的数据库连接技术,使得Java应用程序可以与各种关系型数据库无缝连接,实现数据的持久化和读取。此外,ORM框架如Hibernate则进一步简化了数据库操作,将Java对象与数据库表之间的映射关系抽象化,使得开发人员能够以纯粹的面向对象方式来处理数据库数据。
这些强大而高效的功能使得Java成为了在数据处理领域的首选语言。无论是小型的数据处理任务还是复杂的企业级应用,Java都能胜任。它不仅提供了稳定可靠的数据处理能力,还使得开发人员能够以更加直观和便捷的方式进行编码,极大地提高了开发效率和代码质量。
在Java的引领下,Excel表的读取、写入和数据库交互不再是一项繁重的任务,而是变得充满乐趣和创造力。随着技术的不断演进,Java将继续为开发人员提供更多更强大的工具和框架,让数据处理变得更加简单而又强大,为应用程序的发展带来更广阔的可能性。