我想使用 servlet 将文件 CSV 上传到 MySQL,我有这样的代码,但我的代码出错了。
package ServToDb;
import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import com.opencsv.CSVReader;
import Connection.Database;
@WebServlet("/ImportCSVtoDB")
public class ImportCSVtoDB extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ImportCSVtoDB() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String target_file ; // fileThatYouWantToFilter
File folderToScan = new File("C:/Users/DELL/Music/"); // this is the path we are scanning
File[] listOfFiles = folderToScan.listFiles();// this is the list of files returned in this folder
for (int j = 0; j < listOfFiles.length; j++) { // for each file in the folder
if (listOfFiles[j].isFile()) {
target_file = listOfFiles[j].getName();
if (target_file.equals("blog.csv")) { // look for the file. You can also check if it ends with csv etc.
try
{
Database db = new Database();
String loadQuery = "LOAD DATA LOCAL INFILE 'C:/Users/DELL/Music/csvtest.csv' INTO TABLE"
+ "importcsv FIELDS TERMINATED BY ','LINES TERMINATED BY 'n' (fname, sex) "; //remember to change the path here as well
Statement stmt = db.dbConn().createStatement();
stmt.execute(loadQuery);
}
catch (Exception e)
{
e.printStackTrace();
}
try (CSVReader reader = new CSVReader(new FileReader("C:/Users/DELL/Music/" + target_file), ',');)
{
Database db = new Database();
String insertQuery = "Insert into importcsv (fname, sex) values (?,?)";//write your insertion query
PreparedStatement pstmt = db.dbConn().prepareStatement(insertQuery);
String[] rowData = null;// create empty array which will hold values from csv
while((rowData = reader.readNext()) != null)
{
int i = 0;
for (String data : rowData)
{
i++;
if (i<3) {
pstmt.setString(i, data);
if (i == 2) {
pstmt.addBatch();// add batch
}
if (i % 30 == 0)// insert when the batch size is 10
{
pstmt.executeBatch(); // execute queries
}
}
}
}
}
catch (Exception e) {
e.printStackTrace();}
}
}
}
out.println("success");
}
}
但是我得到这样的错误。
The constructor CSVReader(Reader, char) is deprecated
从第 60 行
try (CSVReader reader = new CSVReader(new FileReader("C:/Users/DELL/Music/" + target_file), ',');)
我怎样才能使这段代码运行,请帮助我,提前感谢您的任何帮助。我不想为我完成这件事,我只是被困住了,需要帮助找到我的路。
真正的答案在这里:
- 您搜索已弃用的术语
- 然后你会发现:弃用意味着某些方法被标记,所以你不应该再使用它(见这里(
- 注意应该:你仍然可以使用它,但是库的某些未来版本可能会删除该CTOR/方法,然后你的代码将不再编译(意思是:以上是一个警告,理论上你可以忽略它(
- 但忽略是错误的方法。
相反:你转向你正在使用的类的javadoc(可能在这里(,在那里找到:
荒废的。请改用CSVReaderBuilder。
此处记录了该生成器类,包括一个用法示例。
除此之外:如果您确实收到错误(例如您的 IDE 告诉您这是一个错误(,那是因为您配置了 IDE 设置,将此警告标记为错误(因此这又是您很容易影响自己的事情(。
最后:这里真正真正的答案是不要写下你不理解的代码。似乎你从某个地方得到了代码,你开始使用它,没有做任何研究代码到底在做什么。这是一种效率低下的做法。您想了解源代码中的每个字符。如果你不理解某件事,那么你就会研究它,直到你理解它。这就是你学习编程的方式。
以下是已弃用代码的确切解决方案:
CSVParser csvParser = new CSVParserBuilder().withSeparator(',').build();
CSVReader reader = new CSVReaderBuilder(new FileReader("C:/Users/DELL/Music/" +
target_file)).withCSVParser(csvParser).build();
您可以只使用扫描仪,除非您专门尝试使用该 CSV 阅读器包?
Scanner scanner = new Scanner("fileName.csv"); //open the file
while(scanner.hasNextLine()) { //Iterate through the file
String line = scanner.nextLine(); //grab the next line
String[] lineParts = line.split(","); //split based on commas and do something with the data
}
scanner.close(); //close the file