السلام عليكم
في البداية لدي كود كل ما يجب أن يقوم به هو أن يقرأ البيانات من ملف اكسل ويخزنها في قاعدة بيانات
ولعمل ذلك اقوم لتخزين العناصر التي في ملف الاكسل داخل ArrayList ثم اقوم بتصديرها الى قاعدة البيانات
الآن ما اريد عمله هو أن لدي ملف اكسل لكنه يحوي بيانات متكررة وانا لا اريد أن أخزن اي بيانات متكررة في قواعد البيانات أي انني اريد ان اهمل اي قيم متكررة
كما نرى في ملف الاكسل هذه القيم المتكررة Songs.xls ولتفادي ذلك خطر لي ان استخدم Set في تخزين القيم وبذلك تقوم الـ Set باهمال اي قيمة مكررة
هدفي كان هو أن يتم تخزين كل القيم في ArrayList ثم تحويل الـ ArrayList الى Set كي يتم اسقاط القيمم المكررة
ArrayList list = new ArrayList(); Set set = new TreeSet(list);
المشكلة أنه عندما اطبق هذه العملية على الكود الذي كتبته احلصل على خطأ
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at java.util.AbstractCollection.addAll(Unknown Source) at java.util.TreeSet.addAll(Unknown Source) at java.util.TreeSet.<init>(Unknown Source) at Mysql.Excel2DB4.readExcelFile(Excel2DB4.java:73) --> يشير الى عملية التحويل اشرت لها فوق
الكود
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
public class Excel2DB {
public static void main(String[] args) throws Exception{
ArrayList dataHolder = readExcelFile(); }
public static ArrayList readExcelFile(){
ArrayList dataSheet = new ArrayList();
try {
FileInputStream file = new FileInputStream(new File("d:\\Songs.xls"));
//Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook(file);
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
//display from the first row
if(row.getRowNum() > 0)
{
//For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
ArrayList data = new ArrayList();
while(cellIterator.hasNext()) {
//Getting the cell contents
Cell cell = cellIterator.next();
data.add(cell);
}
dataSheet.add(data);
}
}
}catch (Exception e){e.printStackTrace();
}
return dataSheet;
}
}
}طبعا هذا فقط جزء من الكود الخاص فقط بقراءة البينات من ملف الاكسل وتخزينها في arraylist ثم تخزين هذه الArraylist في Set كي يتم اسقاط القيم المتكررة
الخطا واضح وهو يظهر انه يجب ان يكون هناك مقارنات Compare
اثناء بحثي في الانترنت فهمت انه يجب انشاء كلاس خاص لتمثيل البيانات ومن اجل أن يقوم بعمل compare
صراحة لم أفهم كيف ولماذا فهل من مساعدة يا أخوة