转换子字符串部分时的数字格式异常

时间:2012-12-19 05:38:23

标签: java

我正在尝试创建一个自动递增函数,每次用户创建表Departmenent_id(varchar)时递增并且id我已经给出了A1,A2 .....所以我在我的autoincrement()中做了什么我使用结果来自select Dept_id from Department并尝试将整数部分与此分开并添加到TreeSet集合并取出最大元素并添加到字符串的第一部分但我遇到的问题取出像9这样的字符串的子字符串,并将其解析为整数即时获取number format exception。为什么我遇到这个问题我的功能代码就在这里

    private String autoIncreament() {
    String id = null;
    String num = null;
    String result = "SELECT DEPARTMENT_ID FROM  Department";
    TreeSet<Integer> treeSet = new TreeSet<Integer>();
    List<Map<String, Object>> result1 = getJdbcTemplate().queryForList(
            result);
    for (Map<String, Object> map : result1) {
        id = (String) map.get("DEPARTMENT_ID");
        System.out.println("id=" + id);
        num = id.substring(1);
        int number = Integer.parseInt(num);
        treeSet.add(number);

    }

    Integer in = treeSet.pollLast();
             int c=in.intValue();
               c++;
    id = id +c ;
    /* System.out.println("jcak="+rowSet.getRow()); */
    return id;
}

我的例外情况

    19 Dec, 2012 11:25:14 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5d764be1: startup date [Wed Dec 19 11:25:14 IST 2012]; root of context hierarchy
19 Dec, 2012 11:25:14 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [mybeans.xml]
19 Dec, 2012 11:25:14 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7b5a6029: defining beans [dataSource,employeeDaoImpl,departmentdao]; root of factory hierarchy
19 Dec, 2012 11:25:14 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
ankur=com.nousinfo.tutorial.employee.model.Department@7eb1cc87
id=9
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.nousinfo.tutorial.employee.dao.impl.DepartmentDAOImpl.autoIncreament(DepartmentDAOImpl.java:113)
    at com.nousinfo.tutorial.employee.dao.impl.DepartmentDAOImpl.getDepartment(DepartmentDAOImpl.java:47)
    at AccessClass.main(AccessClass.java:34)

5 个答案:

答案 0 :(得分:1)

这可能是导致NumberFormatException的行。

int number = Integer.parseInt(num);

查看错误的最简单方法是在此行之前打印num,它可能不是数字。

编辑(问题被修改后) - 空字符串(“”)无法转换为整数。

另外,对于任何严重的用例/应用程序,您都可以使用ID生成器。

答案 1 :(得分:0)

如果您使用普通的jdbc,则java提供了读取密钥的支持。

connection = getConnection();
String sql = "insert into table1 (col1,Rcol2) values (?, ?)";
ps = connection.prepareStatement(sql, new String[] {"colKEY"});
ps.setString(1, col1Val);
ps.setString(2, col2Val);
ps.executeUpdate();     

rs = ps.getGeneratedKeys();
if (rs.next()){
    colKey = new Integer(rs.getInt(1));
}
connection.commit();

希望这会有所帮助。

答案 2 :(得分:0)

异常说明了一切:

  

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”

您正在尝试将空字符串解析为int

如果输入字符串9并且您从索引1获取子字符串,那么您将获得空字符串

答案 3 :(得分:0)

 num = id.substring(1);

it shows start index from 1. If your value is "7" then it will get "".

随之改变

  num = id.substring(0);         

 try{
       int number = Integer.parseInt(num);

 } catch (NumberFormatException ex) {
   ex.printStackTrace();
  }

答案 4 :(得分:0)

问题是您没有使用前缀提交序列号。只需以下逻辑可以帮助您

  1. Department
  2. 获取表格"select count(*) from department"中的行数
  3. 然后return "A"+(numberOfRows+1) ;