Строки не могут быть преобразованы в приемник DAO - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь выполнить операцию пакетной вставки с объектом списка, но при вставке я получаю строку, которую невозможно преобразовать в DAO. Получатель в цикле итератора.

Я попытался перечислить объект списка,в это время он печатает значения из списка.но когда я использую дженерики в обычном списке, он показывает ошибку, и я не могу найти никакого решения для вставки. Из этого метода я читаю файл Excel и сохраняю в список

public List collect(Receiver rec)
    {
        //ReadFromExcel rd = new ReadFromExcel();
        List<String> up = new ArrayList<String>();
        //List<String> details = rd.reader();
        //System.out.println(details);
        try( InputStream fileToRead = new FileInputStream(new File(rec.getFilePath()))) 
        { 
            XSSFWorkbook  wb = new XSSFWorkbook(fileToRead);


            wb.setMissingCellPolicy(Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
            XSSFSheet sheet = wb.getSheetAt(0);
            DataFormatter fmt = new DataFormatter();
            String data ="";
            for(int sn = 0;sn<wb.getNumberOfSheets()-2;sn++)
            {
                sheet = wb.getSheetAt(sn);
                for(int rn =sheet.getFirstRowNum();rn<=sheet.getLastRowNum();rn++)
                {
                    Row row = sheet.getRow(rn);
                    if(row == null)
                    {
                        System.out.println("no data in row ");

                    }
                    else
                    {
                        for(int cn=0;cn<row.getLastCellNum();cn++)
                        {
                            Cell cell = row.getCell(cn);
                            if(cell == null)
                            {
//                                System.out.println("no data in cell ");
//                                data = data + " " + "|";

                            }
                            else
                            {
                                String cellStr = fmt.formatCellValue(cell);
                                data = data + cellStr + "|";
                            }
                        }
                    }
                }
            }
            up = Arrays.asList(data.split("\\|"));


           // System.out.println(details);             
                }
                catch (FileNotFoundException ex) 
                {
                Logger.getLogger(BImplementation.class.getName()).log(Level.SEVERE, null, ex);
                } 
            catch (IOException ex) 
            {
                Logger.getLogger(BImplementation.class.getName()).log(Level.SEVERE, null, ex);
            } 

        Iterator iter = up.iterator();
        while(iter.hasNext())
        {
            System.out.println(iter.next());
        }

        String row="";
        Receiver info = null;
        String cid = "";
        String cname = "";
        String address = "";
        String mid = "";
        boolean b = false;


        List<Receiver> res = new ArrayList<Receiver>();
        int c = 0;
        try
        {
            String str = Arrays.toString(up.toArray()); 
           //System.out.println(str);
            String s = "";
            s = s + str.substring(1,str.length());
          // System.out.println("S:"+s);
            StringTokenizer sttoken = new StringTokenizer(s,"|");
            int count = sttoken.countTokens();
            while(sttoken.hasMoreTokens())
            {  
                if(sttoken.nextToken() != null)
                {
//                    System.out.print(sttoken.nextToken());
                    cid = sttoken.nextToken();
                    cname = sttoken.nextToken();
                    address = sttoken.nextToken();
                    mid = sttoken.nextToken();


                info = new Receiver(cid,cname,address,mid);
                res.add(info);
               System.out.println("cid :"+cid+ "  cname : "+cname +"  address : "+address+" mid : "+mid);
                c = res.size();
            // System.out.println(c);
                }
                else
                {
                    break;

                }
            }
            System.out.println(count);
           // System.out.println("s");



        } 
            catch(NoSuchElementException ex)
            {
                System.out.println("No Such Element Found Exception" +ex);
            }
        return up;

        }

с помощью этого метода I 'm пытается вставить в базу данных

public boolean insert(List res) 
    {
        String sqlQuery = "insert into records(c_id) values (?)";
        DBConnection connector = new DBConnection();

        boolean flag = false;

//        Iterator itr=res.iterator();
//        while(it.hasNext())
//        {
//            System.out.println(it.next());
//        }
         try( Connection con = connector.getConnection();)
         {
             con.setAutoCommit(false);        
             PreparedStatement pstmt = con.prepareStatement(sqlQuery);

              Iterator it = res.iterator();
              while(it.hasNext())
              {
                Receiver rs =(Receiver) it.next();
                pstmt.setString(1,rs.getcID());            
                pstmt.setString(2,rs.getcName());
                pstmt.setString(3,rs.getAddress());
                pstmt.setString(4,rs.getMailID());
                pstmt.addBatch();  


              }      
              int [] numUpdates=pstmt.executeBatch();
              for (int i=0; i < numUpdates.length; i++) 
              {
                if (numUpdates[i] == -2)
                {
                  System.out.println("Execution " + i +": unknown number of rows updated");
                  flag=false;
                }
                else
                {
                  System.out.println("Execution " + i + "successful: " + numUpdates[i] + " rows updated");
                  flag=true;
                }
              }
              con.commit();
            } catch(BatchUpdateException b) 
            {
              System.out.println(b);
              flag=false;
            }       
            catch (SQLException ex) 
            { 
                Logger.getLogger(BImplementation.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println(ex);
                flag=false;
            }
return flag;      
        }

Я хочу вставить объект списка, используя пакетную вставку JDBC в базу данных.

1 Ответ

0 голосов
/ 26 марта 2019

Ваш метод collect (Receiver rec) возвращает список строк с именем up .

return up;

Однако (если вы действительно используете метод собрать для передачи списка в метод insert (List res) ), вы ожидаете, что этот список будет содержать объекты Receiver.Это неверно, поскольку метод collect (..) возвращает список строк.

И это приводит к ошибке при попытке привести Receiver rs = (Receiver) it.next ();

Вам нужно проверить и исправить свой код, чтобы вы передавали список объектов Receiver вместо строк.

И я действительно рекомендую вам начать использовать Genericsгде бы вы ни использовали класс List.В этом случае компилятор немедленно покажет вам все ошибки типов данных.

...