-1

我正在尝试创建一个自动增量功能,每次用户创建表时Departmenent_id(varchar)都会增加并且我给 A1,A2 的 id ......所以我在我的 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)
4

5 回答 5

1

这可能是导致 NumberFormatException 的行。

int number = Integer.parseInt(num);

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

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

附带说明一下,您可以为任何严重的用例/应用程序标识生成器。

于 2012-12-19T05:51:23.223 回答
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();

希望这会有所帮助。

于 2012-12-19T05:52:11.737 回答
0

例外说明了一切:

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

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

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

于 2012-12-19T05:54:07.030 回答
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();
  }
于 2012-12-19T05:57:46.557 回答
0

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

  1. Department获取表中的行数"select count(*) from department"
  2. 然后return "A"+(numberOfRows+1) ;
于 2012-12-19T06:09:07.267 回答