Неверное значение для типа int: auditel. Решение?

#java #jdbc

#java #jdbc

Вопрос:

Я выполняю свой код, и компилятор выдает мне эту ошибку. «Eccezione instanziazione 1 f.getGroup().add()Неверное значение для типа int: auditel». Кто-нибудь знает, как решить эту проблему? Я ищу в Интернете и пробую некоторые решения, но всегда возникает одна и та же проблема. Вот часть, которая не запускается:

 for(Famiglia f: family) {
            try(PreparedStatement pst_G = conn.prepareStatement("SELECT id, epg_channel_id, user, startime, endtime FROM log2_3min_groups_clean WHERE family_id = ?")) {
                //set the variables
                pst_G.setInt(1, f.getId()); //parameters are: (index <of var>, value <of var>)
                //eseguo la query
                ResultSet rs_G = pst_G.executeQuery();
                //foreach record from the database about every action of every family's component
                //int indexGroup = 0;
                //int indexUserIntoGroup = 0; attualmente non in uso
                while(rs_G.next()) {
                    //se la lista è vuota
                    if(f.getGroup().isEmpty()){
                        //instanzio il primo gruppo e utente

                        //stringa data and ora
                        String dataOraStart = rs_G.getString("starttime"); //format 'yyyy-mm-dd hh:ms:ss'
                        String dataOraFine = rs_G.getString("endtime"); //format 'yyyy-mm-dd hh:ms:ss'

                        try {

                            //ottengo data inizio dalla stringa
                            int yyS = Integer.parseInt(dataOraStart.substring(0,4));
                            int mmS = Integer.parseInt(dataOraStart.substring(5,7));
                            int ddS = Integer.parseInt(dataOraStart.substring(8,10));
                            //quindi, LocalDate
                            LocalDate dS = LocalDate.of(yyS, mmS, ddS);

                            //ottengo ora inizio dalla stringa
                            int hhS = Integer.parseInt(dataOraStart.substring(11,13));
                            int msS = Integer.parseInt(dataOraStart.substring(14,16));
                            int ssS = Integer.parseInt(dataOraStart.substring(17,19));
                            //quindi, LocalTime
                            LocalTime hS = LocalTime.of(hhS, msS, ssS);

                            //ottengo data di fine dalla stringa
                            int yyE = Integer.parseInt(dataOraFine.substring(0,4));
                            int mmE = Integer.parseInt(dataOraFine.substring(5,7));
                            int ddE = Integer.parseInt(dataOraFine.substring(8,10));
                            //quindi, LocalDate
                            LocalDate dE = LocalDate.of(yyE, mmE, ddE);

                            //ottengo ora di fine dalla stringa
                            int hhE = Integer.parseInt(dataOraFine.substring(11,13));
                            int msE = Integer.parseInt(dataOraFine.substring(14,16));
                            int ssE = Integer.parseInt(dataOraFine.substring(17,19));
                            //quindi, LocalTime
                            LocalTime hE = LocalTime.of(hhE, msE, ssE);

                            try {

                                f.getGroup().add(new Gruppo(rs_G.getInt("epg_channel_id"),  dS, hS, dE, hE));

                                for(int idx = 0; idx < utenti.size(); idx  )
                                    if(utenti.get(idx).getId() == rs_G.getInt("current_user"))
                                        idxUtente = idx;

                                if(f.getGroup().get(0).addUtente(utenti.get(idxUtente), rs_G.getInt("epg_channel_id"), dS, hS, dE, hE, rs_G.getInt("id")) == true) { //get(0) it's better than others 'cause if we know the list it's empty and also we use add() method, we know there is only one element at the index=0
                                    System.out.println("Expected");
                                } else {
                                    System.out.println("Unexpected");
                                }

                            } catch (Exception e) {
                                System.out.println("Eccezione instanziazione 1 f.getGroup().add()"   e.getMessage());
                            }
  

Комментарии:

1. Я нигде не вижу этого слова auditel в коде или запросе. имеет ли это особое значение на итальянском?

2. К какому типу данных относится столбец starttime ? Если это date или timestamp , вы должны получить значение с помощью rs_G.getObject("starttime", LocalDate.class) or rs_G.getObject("starttime", LocalDateTime.class) , а не пытаться разобрать строку. Если это не date или timestamp , то вам следует исправить свою модель данных. Никогда не сохраняйте значения даты / времени в varchar столбцах.

3. Кроме того, ваше сообщение об ошибке (которое вы определили) предполагает, что только проблема с f.getGroup().add() вызовет исключение. Но вы перехватываете любое исключение в довольно большой части кода. По крайней мере, во время отладки вы также должны распечатать трассировку стека, чтобы понять, где в этом наборе кода генерируется исключение.

4. @f1sh это итальянский эквивалент рейтингов Nielsen, но это не так важно для вопроса, поскольку это данные, поступающие из базы данных. Важно то, что это не число.

5. Вообще говоря, вы решаете эту проблему, не пытаясь анализировать что-то, что не является числом. auditel это не число, если вы не используете систему счисления «base-31». В последнем случае вы добавляете правильный redix в код, который будет анализировать ваши числа.