Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换子字符串部分时出现数字格式异常_Java - Fatal编程技术网

Java 转换子字符串部分时出现数字格式异常

Java 转换子字符串部分时出现数字格式异常,java,Java,我试图创建一个自动递增函数,每次用户创建表Departmenent\u id(varchar)时,该函数都会递增,并且我给出的id为A1、A2。。。。。我在autoincrement()中使用,从获取结果从Department中选择Dept\u id并尝试将整数部分从中分离出来,添加到树集集合中,取出最大的元素并添加到字符串的第一部分,但当我取出字符串的子字符串(如9)并将其解析为我得到的整数时,我会遇到问题数字格式异常。为什么我会遇到这个问题我的函数代码就在这里 private Str

我试图创建一个自动递增函数,每次用户创建表
Departmenent\u id(varchar)
时,该函数都会递增,并且我给出的id为A1、A2。。。。。我在autoincrement()中使用,从
获取结果从Department
中选择Dept\u id并尝试将整数部分从中分离出来,添加到
树集
集合中,取出最大的元素并添加到字符串的第一部分,但当我取出字符串的子字符串(如
9
)并将其解析为我得到的整数时,我会遇到问题
数字格式异常
。为什么我会遇到这个问题我的函数代码就在这里

    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;
}

这可能是导致NumberFormatException的行

int number = Integer.parseInt(num);
查看错误的最简单方法是在此行之前打印
num
,它可能不是数字

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


另一方面,您可以为任何严重的用例/应用程序标识生成器。

如果您使用的是普通的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();
希望这会有所帮助。

例外说明一切:

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

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

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

 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();
  }

问题是您没有提交带有前缀的序列号。下面的逻辑可能对您有所帮助

  • 通过从部门中选择计数(*)获取表
    部门中的行数
  • 然后
    返回“A”+(numberOfRows+1)

  • 您确定只提取数字吗?这不是递增序列号的好逻辑。ID生成器使用单独的表。如果您使用JPA,您可以使用TableGeneratory您可以拥有一个Table
    IDGenerator
    columns 1.TableName 2.LastSeqNumber。无论何时添加新行,都要增加最后一个序号。我不认为parseInt行中存在异常。请发布您的完整输出exception@vels4j但是我没有使用jpa我必须建立我自己的逻辑这就是为什么我把我的问题贴在这里,为什么我在将数字格式转换为整数时出现异常?请帮助我,我没有使用正常的jdbc,我在使用Spring。这篇文章的描述显然有误导性,因为OP显示打印值为
    9
      num = id.substring(0);         
    
     try{
           int number = Integer.parseInt(num);
    
     } catch (NumberFormatException ex) {
       ex.printStackTrace();
      }