2013-07-26 19 views
0

我有一个问题。当将varchar(500)latin1_swedish_ci mysql数据类型转换为整数时出现NumberFormatException

目前,我试图将字符串值转换为整数。在这种情况下,字符串值是数据类型为varchar(500)latin1_swedish_ci的数据库中的值。

从数据库中提取值后,我想转换为整数,因为我有一些进一步处理作为整数值。

以下是我的代码。

String order_number=""; 
    DbEngine db = new DbEngine(); 
    String select_max_order_id = " SELECT MAX(orderid) AS orderid FROM `orders` "; 
    try{ 
     Connection con = db.getConnection(); 
     con.setAutoCommit(false); 

     PreparedStatement prp_select = con.prepareStatement(select_max_order_id); 

     ResultSet rs = prp_select.executeQuery(); 

     while(rs.next()){ 
      order_number=rs.getString("orderid"); 
      int order_no = Integer.parseInt("order_number"); 
      order_no+=1; 
      order_number = Integer.toString(order_no); 
     } 
     con.commit(); 
     con.close(); 
    } 
    catch(SQLException ex) { 
     System.out.println("Error"+ex.getSQLState()); 
    } 
    catch(ClassNotFoundException ex) { 
     System.out.println("Error"+ex.getException()); 
    } 
    catch(NumberFormatException ex) { 
     System.out.println("Parsing Error"+ex.getStackTrace()); 
    } 

问题是,当order_number被解析为字符串值,抛出NumberFormatException。 这是来自服务器的堆栈跟踪。 [Ljava.lang.StackTraceElement; @ 257f04

但是,当我传递确切的字符串值,如int order_no = Integer.parseInt(“10”);

任何人都可以建议我如何解决它吗?

感谢

+0

您能否将'ex.printStackTrace();'添加到您的catch块中,然后编辑您的帖子以显示stacktrace是什么? – beny23

+1

如果你的字段应该总是包含一个数字,为​​什么你使用varchar字段呢? –

+0

另请注意,如果在同一时间创建两个新订单,则此方法可能会导致重复的订单号。您可能需要考虑为您的订单号使用序列。 – beny23

回答

1

尝试:

Integer.parseInt(order_number); 

应该是可变这里。

+0

谢谢...它现在可以工作.. –

3

你就在附近。

你试图解析字符串"order_number"而不是你的实际订单数量串order_number

order_number=rs.getString("orderid"); 
int order_no = Integer.parseInt(order_number); // remove those quotes 
1

您应该删除引号。

尝试,Integer.parseInt(order_number);,而不是Integer.parseInt("order_number");

之前你解析字符串* ORDER_NUMBER *而不是解析变量。

1
int order_no = Integer.parseInt("order_number"); 

当你说你上面的意思是字符串声明“ORDER_NUMBER”是一个整数,让我(这是没有的。)。您正在将数据存储在名为order_number的字符串中。所以要检索你的整数你必须这样做 -

int order_no = Integer.parseInt(order_number); 
0

老兄的问题是,你试图将字符串值转换为int,这是不可能的。从这里开始

您的代码在这里 order_number = rs.getString(“orderid”); int order_no = Integer.parseInt(“order_number”); order_number变量是String,并将其转换为int。 你可以做的是使字符串select_max_order_id作为int而不是int,并且在那里你不需要任何转换。

+0

@Jon Skeet,实际上orderid字段是自创建表以来的varchar。而且,保存这些orderid值将以这种方式进行。它是由程序生成的,就像我现在所做的一样。比方说,最大订单ID是10,它会增加1,所以11和11将被保存到数据库中。那么,任何想法没有做任何转换plz? –

相关问题