快速学习:使用Swing导出Excel文件到数据库。 (swing从数据库中导出excel)
快速学习:使用Swing导出Excel文件到数据库
在日常工作中,经常需要将Excel文件中的数据导入到数据库中。手动操作费时费力,因此我们需要一种简单、快速的方法来实现导出Excel文件到数据库。本文将介绍如何使用Swing实现这一功能。
一、准备工作
在使用Swing导出Excel文件到数据库之前,我们需要准备好以下工具和环境:
1. JDK:确保您已经安装了最新版本的Java Development Kit(JDK)。
2. Eclipse:Eclipse是一种广泛使用的Java IDE,可以用于开发Java应用程序。
3. MySQL数据库:在本教程中,我们将使用MySQL数据库来演示将Excel数据导入数据库。
4. poi-3.17.jar:这是Apache POI的最新版本,我们需要使用它来读取Excel文件。
二、创建GUI
我们需要创建一个Graphical User Interface(GUI)来操作我们的代码。使用Swing可以轻松创建GUI。
在Eclipse中创建一个新的Java项目,并在其中创建一个新的类,命名为ExcelToDatabase.java。在该文件中添加以下代码:
“`
import javax.swing.*;
import java.awt.*;
public class ExcelToDatabase extends JFrame {
public ExcelToDatabase() {
setTitle(“Excel To Database”);
setSize(300, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
// Add components to the frame
JLabel label1 = new JLabel(“Enter Excel file path:”);
JTextField textField1 = new JTextField();
JLabel label2 = new JLabel(“Enter database name:”);
JTextField textField2 = new JTextField();
JButton button1 = new JButton(“Export”);
JButton button2 = new JButton(“Exit”);
JPanel panel1 = new JPanel(new GridLayout(2, 2));
panel1.add(label1);
panel1.add(textField1);
panel1.add(label2);
panel1.add(textField2);
JPanel panel2 = new JPanel(new FlowLayout());
panel2.add(button1);
panel2.add(button2);
add(panel1, BorderLayout.CENTER);
add(panel2, BorderLayout.SOUTH);
setVisible(true);
}
public static void mn(String[] args) {
new ExcelToDatabase();
}
}
“`
上述代码创建了一个GUI窗口,在其上包含两个文本框和两个按钮。它的布局使用了边界布局管理器(BorderLayout)。
三、将Excel文件读入内存
在导入Excel文件之前,我们需要将其读入到内存中。为此,我们需要使用Apache POI。
我们需要将poi-3.17.jar文件添加到我们的项目中。选择File > Properties > Java Build Path > Libraries,然后点击Add JARs,在您的项目文件夹中选择poi-3.17.jar文件。现在我们可以使用POI库中的类。
在ExcelToDatabase.java文件中添加以下代码来读取Excel文件:
“`
private static void readExcel(String filePath) {
try {
FileInputStream file = new FileInputStream(new File(filePath));
// Create a workbook instance
Workbook workbook = new XSSFWorkbook(file);
// Get the first sheet
Sheet sheet = workbook.getSheetAt(0);
// Loop through rows
Iterator rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// Loop through cells
Iterator cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
System.out.print(cell.toString() + “\t”);
}
System.out.println(“”);
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
“`
该方法接受Excel文件的路径作为参数,并打印出所有单元格的值。我们将在下一步中将这些值导入到数据库中。现在运行程序并输入Excel文件的路径,以确保readExcel()方法可以正常读取数据。
四、将Excel数据插入到数据库中
现在,我们已经读取了Excel文件的所有数据,并将其保存在内存中。接下来,我们需要将这些数据插入到数据库中。
在ExcelToDatabase.java文件中添加以下代码以连接到MySQL数据库:
“`
private static void insertIntoDatabase(String databaseName, List
String url = “jdbc:mysql://localhost/” + databaseName;
String username = “root”;
String password = “”;
try (Connection conn = DriverManager.getConnection(url, username, password)) {
String sql = “INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)”;
PreparedStatement statement = conn.prepareStatement(sql);
for (Object[] row : rows) {
statement.setString(1, (String) row[0]);
statement.setDouble(2, (Double) row[1]);
statement.setInt(3, (Integer) row[2]);
statement.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
“`
此方法需要数据库名称和行列表作为参数。我们使用MySQL服务器连接到数据库并将数据插入到名为“产品”的表中。在这种情况下,表有一个名称,一个价格和一个数量列。
我们需要将行列表传递给该方法,该列表由每个行的值组成。
五、将数据导出到数据库
现在,我们已经准备好了将Excel数据导入到MySQL数据库中的所有要素。在ExcelToDatabase.java文件中添加以下代码,将GUI组件与我们之前创建的方法相结合:
“`
public ExcelToDatabase() {
// …
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String filePath = textField1.getText();
String databaseName = textField2.getText();
List
try {
FileInputStream file = new FileInputStream(new File(filePath));
Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);
Iterator rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator cellIterator = row.cellIterator();
List
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case STRING:
rowValues.add(cell.getStringCellValue());
break;
case NUMERIC:
rowValues.add(cell.getNumericCellValue());
break;
case BOOLEAN:
rowValues.add(cell.getBooleanCellValue());
break;
default:
rowValues.add(null);
break;
}
}
Object[] rowArray = new Object[rowValues.size()];
rowArray = rowValues.toArray(rowArray);
rows.add(rowArray);
}
insertIntoDatabase(databaseName, rows);
file.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
“`
此代码使用ActionListener监听器为按钮添加操作。单击Export按钮将读取Excel文件,将数据存储在内存中,然后将数据插入到MySQL数据库中。如果单击Exit按钮,则程序将退出。
六、结论