2014-11-28 4 views
0

У меня есть следующий класс, и когда я запускаю его я получаю сообщение об ошибке, которое:Java String to Integer не работает?

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "[email protected]" 

Ошибка происходит на этой линии:

fono = Integer.valueOf(fonoS); 

Это код:

public Counter(){ 
    String query = "SELECT MAX(FONO) from forders"; 

try { 
    connectOrders.pst = connectOrders.con.prepareStatement(query); 
    connectOrders.rs = connectOrders.pst.executeQuery(query); 
    if (connectOrders.rs.next()){ 
     Object fonoO = connectOrders.rs; 
     String fonoS= fonoO.toString(); 
     fono = Integer.valueOf(fonoS); 
     try { 
      serialisationFoNo(fono); 
     } catch (IOException ex) { 
      Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    if (connectOrders.rs.wasNull()){ 
     fono = 1; 
     try { 
      serialisationFoNo(fono); 
     } catch (IOException ex) { 
      Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    } catch (SQLException ex) { 
    Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
    JOptionPane.showMessageDialog(null, ex); 
    } 
} 

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

ПРИМЕЧАНИЕ. Я также попытался использовать Integer.parseInt(); но даже это вызывает подобное исключение.

+3

Сообщение довольно ясное. Вы пытаетесь проанализировать представление toString вашего объекта (это 'com.mysql.jdbc.JDBC4ResultSet @ 42147df5'), и это, очевидно, не допустимое целое число, которое вы могли бы проанализировать. –

+0

try rs.getInt (1) – auntyellow

ответ

1

Вы не извлекаете целое число из своего результирующего набора. Во-первых изменить SQL в

"SELECT MAX(FONO) as m from forders" 

и использовать

rs.getInt("m"); 

из результирующего

+0

большой это похоже работа! Хотя я получаю ошибку, которая говорит слишком много подключений. – BEE

-1

Используйте отладчик.

Очевидно, что значение fonOS не может быть проанализировано как Integer в этом случае.

API От:

Символы в строке должны все быть цифрами указанной системы счисления (как определено, возвращает ли Character.digit (символ, целое) в неотрицательное значение), за исключением того, что первый символ может быть ASCII минус знак '-' ('\ u002D'), чтобы указать отрицательное значение или ASCII плюс знак '+' ('\ u002B'), чтобы указать положительное значение.

+1

Downvoter, пожалуйста, объясните? – Mena

+0

Не DV. Думаю, DV ожидал * подробного ответа. – TheLostMind

0

Я думаю connectOrders.rs переменная ResultSet

конвертирования, что один в строку, а затем целое число, которое является неправильным

В наборе результатов содержится целый ряд данных (i S своего рода контейнер), вы, вероятно, хотите, чтобы получить одно из значений внутри и преобразовать это значение в строке/целое, как этот

int x = connectOrders.rs.getInt(1); //get first field from the ResultSet 
0

Вы преобразующий объект ResultSet в строку, а затем его анализ.Вместо того, чтобы ваш код должен быть

int fono = connectOrders.rs.getInt(1); 

Полного применимого код

public Counter(){ 
String query = "SELECT MAX(FONO) from forders"; 

try { 
    connectOrders.pst = connectOrders.con.prepareStatement(query); 
    connectOrders.rs = connectOrders.pst.executeQuery(query); 
    if (connectOrders.rs.next()){ 

//***********your code change here 

     //Object fonoO = connectOrders.rs; 
     // String fonoS= fonoO.toString(); 
     // fono = Integer.valueOf(fonoS); 

    fono = connectOrders.rs.getInt(1); 


//************** 

     try { 
      serialisationFoNo(fono); 
     } catch (IOException ex) { 
      Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    if (connectOrders.rs.wasNull()){ 
     fono = 1; 
     try { 
      serialisationFoNo(fono); 
     } catch (IOException ex) { 
      Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    } catch (SQLException ex) { 
    Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex); 
    JOptionPane.showMessageDialog(null, ex); 
    } 
} 
0

Вы пытаетесь преобразовать все результирующую в целое число, которое является недействительным

Object fonoO = connectOrders.rs; 
String fonoS= fonoO.toString(); 
fono = Integer.valueOf(fonoS); 

Вы могли бы принести столбец из результирующего который вам думаю, было бы целым чем-то на этих линиях, используя

String id = rs.getString(1);//if max(fono) in db is char but can be represented as integer or if its an int field you could do getInt("id") and store it in integer rather than string. 
Integer idValue = Integer.valueOf(id); 
1

ResultSet содержит все значения столбца, которые вы можете получить по индексу столбца (считая от 1) или имени.

Также для подготовленного состояния не добавляется параметр query, который был выполнен при подготовке.

connectOrders.rs = connectOrders.pst.executeQuery(); 
    //String fonoS= rs.getString(1); 
    fono = rs.getInt(1); 

Закрыть ResultSet и утверждение.