今天我們來學習如何使用Java來讀取大文件csv并將其寫入MySQL數據庫。在實際應用中,我們經常會遇到需要讀取大文件csv的情況,而直接讀取會導致內存溢出。因此,我們需要使用Java提供的流來處理大文件csv數據。
首先,我們需要導入以下依賴:
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency>
其中,opencsv庫是用來讀取csv文件的,mysql-connector-java庫是用來連接MySQL數據庫的。
接著,我們來編寫Java代碼:
import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import com.opencsv.CSVReader; import com.opencsv.exceptions.CsvValidationException; public class CSVToMySQL { public static void main(String[] args) throws SQLException, CsvValidationException { String jdbcURL = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "password"; Connection connection = DriverManager.getConnection(jdbcURL, username, password); String csvFilePath = "/path/to/csv/file.csv"; CSVReader csvReader = new CSVReader(new FileReader(csvFilePath)); String[] nextRecord; while ((nextRecord = csvReader.readNext()) != null) { String insertQuery = "INSERT INTO table_name (column_1, column_2, column_3) VALUES (?, ?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(insertQuery); preparedStatement.setString(1, nextRecord[0]); preparedStatement.setString(2, nextRecord[1]); preparedStatement.setString(3, nextRecord[2]); preparedStatement.executeUpdate(); } csvReader.close(); connection.close(); } }
以上代碼中,我們首先定義了連接MySQL數據庫的參數,包括URL、用戶名和密碼。接著,我們使用CSVReader來讀取csv文件,然后利用PreparedStatement將數據插入到MySQL數據庫中。最后,關閉CSVReader和數據庫連接。
需要注意的是,以上代碼仍然可能會出現內存溢出的情況。如果csv文件非常大,我們也可以將其分割成多個小文件進行讀取,以減少內存的占用。
綜上,我們可以使用Java來讀取大文件csv并將其寫入MySQL數據庫。希望本文能夠對大家有所幫助。