#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)
orrs_G.getObject("starttime", LocalDateTime.class)
, а не пытаться разобрать строку. Если это неdate
илиtimestamp
, то вам следует исправить свою модель данных. Никогда не сохраняйте значения даты / времени вvarchar
столбцах.3. Кроме того, ваше сообщение об ошибке (которое вы определили) предполагает, что только проблема с
f.getGroup().add()
вызовет исключение. Но вы перехватываете любое исключение в довольно большой части кода. По крайней мере, во время отладки вы также должны распечатать трассировку стека, чтобы понять, где в этом наборе кода генерируется исключение.4. @f1sh это итальянский эквивалент рейтингов Nielsen, но это не так важно для вопроса, поскольку это данные, поступающие из базы данных. Важно то, что это не число.
5. Вообще говоря, вы решаете эту проблему, не пытаясь анализировать что-то, что не является числом.
auditel
это не число, если вы не используете систему счисления «base-31». В последнем случае вы добавляете правильный redix в код, который будет анализировать ваши числа.