Java-код не может сохранять данные excel в mysql
Уважаемый господин ,
Я написал java-код для сохранения данных excel в mysql, но он показывает исключение: java.sql.SQLException: нет значения, указанного для параметра 22.
вот код :
Что я уже пробовал:
package com.rfmsData.main; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Iterator; import javax.print.DocFlavor.INPUT_STREAM; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Save2Mysql { public static Connection conn=null; public static PreparedStatement pstmt = null; public static void main(String[] args) throws IOException { try { Class.forName ("com.mysql.cj.jdbc.Driver"); conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/rfms", "root","root"); String query="insert into rfmsreports values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(query); FileInputStream input_document = new FileInputStream(new File("E:\\RFMS Expenses1.xlsx")); XSSFWorkbook my_xls_workbook = new XSSFWorkbook(input_document); XSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0); Iterator<row> rowIterator = my_worksheet.iterator(); while(rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch(cell.getCellType()) { case Cell.CELL_TYPE_STRING: //handle string columns pstmt.setString(1, cell.getStringCellValue()); break; case Cell.CELL_TYPE_NUMERIC: //handle double data pstmt.setDouble(2,cell.getNumericCellValue() ); break; } } } pstmt.executeUpdate(); input_document.close(); pstmt.close(); conn.commit(); conn.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO Auto-generated method stub catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Member 14639038
я уже пробовал это сделать:
пока(cellIterator.hasNext()) {
Клеток = cellIterator.далее();
if(row.getCell(1)==null)
{
месяцев = нуль;
}
еще
{
pstmt.setString(1, cell.getStringCellValue());
}
if(row.getCell(2)==null)
{
_adverExpenses = 0;
}
еще
{
pstmt.setDouble(2, cell.getNumericCellValue());
}
if(row.getCell(3)==null)
{
_photocopy=0;
}
еще
{
pstmt.setDouble(3, cell.getNumericCellValue());
}
if(row.getCell(4)==null)
{
_swachBharatExpenses = 0;
}
еще
{
pstmt.setDouble(4, cell.getNumericCellValue());
}
if(row.getCell(5)==null)
{
_postageCourierExpenses = 0;
}
еще
{
pstmt.setDouble(5, cell.getNumericCellValue());
}
if(row.getCell(6)==null)
{
_meetingConference = 0;
}
еще
{
pstmt.setDouble(6, cell.getNumericCellValue());
}
if(row.getCell(7)==null)
{
_manpowerExpensesContact=0;
}
еще
{
pstmt.setDouble(7,cell.getNumericCellValue());
}
if(row.getCell(8)==null)
{
_manpowerFlexi_staffTour=0;
}
еще
{
pstmt.setDouble(8, cell.getNumericCellValue());
}
if(row.getCell(9)==null)
{
_salary_FTS = 0;
}
еще
{
пст
Richard MacCutchan
Сообщение об ошибке совершенно ясно, вы пропускаете значение параметра. Проверьте свой цикл и убедитесь, что вы получаете правильное количество элементов из рабочего листа. Насколько я вижу из вашего кода (который нуждается в форматировании), вы устанавливаете значения только для параметров 1 и 2.
Member 14639038
но я установил значения для 29 параметров.
Richard MacCutchan
Ну, это не то, что говорится в сообщении об ошибке. И почему вы жестко кодируете все эти числа, а не используете простой цикл с индексом?
Richard Deeming
Ваш INSERT
оператор имеет 30 параметров.
А код, который вы показали, задает только первые два параметра.