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