0
여기 내 문제가 있습니다. 필자는 Excel 파일의 데이터를 읽고 데이터베이스의 테이블에로드하는 프로그램을 만들어야합니다. 테이블은 Excel 파일의 이름을 가지며 테이블의 필드는 Excel 파일의 첫 번째 행에있는 데이터입니다. Excel 파일을 읽고 원하는 이름으로 테이블을 만드는 코드를 만들었습니다. 이제 테이블에 값을 삽입해야하지만 여기에 오류가 있습니다.자바를 사용하여 mysql db 테이블에 여러 값을 삽입 할 때 오류가 발생했습니다
아래 코드는 제가 작성한 전체 프로그램입니다.
이Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at readexcel.fillTable(readexcel.java:183)
at readexcel.main(readexcel.java:68)
이 사람이 내가 그것을 해결하는 데 도움 수 :
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class readexcel {
public static void main (String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/kainourgia","root", "root");
Statement stmt = con.createStatement();
//String filename = "C:\\Users\\myfiles\\Documents\\test6.xls";
String fullPath = "C:\\Users\\myfiles\\Documents\\test7.xls";
String Path = "C:\\Users\\myfiles\\Documents\\";
String filename = "test7.xml";
String[] parts = filename.split("\\.");
String tablename = parts[0];
List sheetData = new ArrayList();
FileInputStream fis = null;
try {
fis = new FileInputStream(fullPath);
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
HSSFRow row = (HSSFRow) rows.next();
Iterator cells = row.cellIterator();
List data = new ArrayList();
while (cells.hasNext()) {
HSSFCell cell = (HSSFCell) cells.next();
data.add(cell);
}
sheetData.add(data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
fis.close();
}
}
showExcelData(sheetData);
HashMap<String,Integer> tFields = new HashMap();
tFields = parseExcelData(sheetData);
String str = getCreateTable(con, tablename, tFields);
str = fillTable (con, tablename, tFields);
}
private static void showExcelData(List sheetData) {
// HashMap<String, String> tableFields = new HashMap();
for (int i=0; i<sheetData.size();i++){
List list = (List) sheetData.get(i);
for (int j=0; j<list.size(); j++){
Cell cell = (Cell) list.get(j);
if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC)
{
System.out.print(cell.getNumericCellValue());
}
else if(cell.getCellType()==Cell.CELL_TYPE_STRING)
{
System.out.print(cell.getRichStringCellValue());
}
else if(cell.getCellType()==Cell.CELL_TYPE_BOOLEAN) {
System.out.print(cell.getBooleanCellValue());
}
if (j < list.size() - 1)
{
System.out.print(", ");
}
}
System.out.println("");
}
}
@SuppressWarnings({ "unchecked", "unused" })
private static HashMap parseExcelData (List sheetData){
HashMap<String,Integer> tableFields = new HashMap();
List list = (List) sheetData.get(0);
for (int j=0; j<list.size(); j++){
Cell cell=(Cell) list.get(j);
tableFields.put(cell.getStringCellValue(),cell.getCellType());
}
return tableFields;
}
private static String getCreateTable(Connection con, String tablename, HashMap<String, Integer> tableFields){
Iterator iter = tableFields.keySet().iterator();
Iterator cells = tableFields.keySet().iterator();
String str="";
String[] allFields = new String[tableFields.size()];
int i = 0;
while (iter.hasNext()){
String fieldName = (String) iter.next();
Integer fieldType=(Integer)tableFields.get(fieldName);
switch (fieldType){
case Cell.CELL_TYPE_NUMERIC:
str=fieldName + " INTEGER";
break;
case Cell.CELL_TYPE_STRING:
str= fieldName + " VARCHAR(255)";
break;
case Cell.CELL_TYPE_BOOLEAN:
str=fieldName + " INTEGER";
break;
}
allFields[i++]= str;
}
try
{
Statement stmt = con.createStatement();
// try
// {
// System.out.println("Use the database...");
// stmt.executeUpdate("USE kainourgia;");
// }
// catch(SQLException e)
// {
// System.out.println("SQLException: " + e.getMessage());
// System.out.println("SQLState: " + e.getSQLState());
// System.out.println("VendorError: " + e.getErrorCode());
// }
try
{
String all = org.apache.commons.lang3.StringUtils.join(allFields, ",");
String createTableStr = "CREATE TABLE " + tablename + " (" + all + ")";
System.out.println("Create a new table in the database");
stmt.executeUpdate(createTableStr);
}
catch(SQLException e)
{
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
}
catch(Exception e)
{
}
return str;
}
private static String fillTable(Connection con, String fieldname, HashMap<String, Integer> tableFields){
Iterator iter = tableFields.keySet().iterator();
Iterator cells = tableFields.keySet().iterator();
String str="";
String[] tousFields = new String[tableFields.size()];
int i = 1;
while (iter.hasNext()){
String fieldName = (String) iter.next();
Integer fieldType=(Integer)tableFields.get(fieldname);
while (cells.hasNext()){
String fieldName1 = (String) cells.next();
Integer fieldType1=(Integer)tableFields.get(fieldName1);
}
tousFields[i++]= str;
}
try
{
Statement stmt = con.createStatement();
System.out.println ("Use the table");
String all = org.apache.commons.lang3.StringUtils.join(tousFields, ",");
String sql= "INSERT INTO" + fieldname + "VALUES (" +all +")";
stmt.executeUpdate (sql);
}
catch(SQLException e)
{
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
return str;
}
private Statement createStatement() {
return null;
}
}
은 내가 오류이 무엇입니까? 각 셀에 값을 삽입하려면 어떻게해야합니까? 삽입 값의 명령이 맞습니까?
이 아니 내가 INT에서 시작 = 1 때문에 첫 번째 행에서 테이블을 것이다 필드가 아닌 값이다. – dedmar
그래서 마지막 요소 앞에 멈추거나 String [] tousFields = new String [tableFields.size() + 1]을 선언해야합니다. – BobTheBuilder
그래, 고마워! :)하지만 지금 내가 이것을 실행하면 : SQLException : 당신은 SQL 구문에 오류가 있습니다; 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, – dedmar