java.lang.StringIndexOutOfBoundsException: String index out of range: -1错误??
部分代码:publicvoidregist()throwsException{Stringsql="insertintotb_carvalues(?,?,?,?,?,?,...
部分代码:
public void regist() throws Exception
{
String sql="insert into tb_car values(?,?,?,?,?,?,?,?,?,?,?)";
String str="select max(id) as maxint from tb_car";
ResultSet rs=rst.getResult(str);
String newmax=null;
while(rs.next())
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
try
{
PreparedStatement pstmt = rst.getPreparedStatement(sql);
pstmt.setString(1, newmax);
//pstmt.setString(1, carinfo.getId());
pstmt.setString(2, carinfo.getCbqc());
pstmt.setString(3, carinfo.getCbjc());
pstmt.setString(4, carinfo.getCd());
pstmt.setString(5, carinfo.getDw());
pstmt.setString(6, carinfo.getXl());
pstmt.setString(7, carinfo.getXh());
pstmt.setString(8, carinfo.getFdjh());
pstmt.setString(9, carinfo.getCjh());
pstmt.setString(10, carinfo.getGysname());
pstmt.setString(11, carinfo.getBz());
pstmt.executeUpdate();
}
catch (Exception e) {
e.printStackTrace();
throw e;
} 展开
public void regist() throws Exception
{
String sql="insert into tb_car values(?,?,?,?,?,?,?,?,?,?,?)";
String str="select max(id) as maxint from tb_car";
ResultSet rs=rst.getResult(str);
String newmax=null;
while(rs.next())
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
try
{
PreparedStatement pstmt = rst.getPreparedStatement(sql);
pstmt.setString(1, newmax);
//pstmt.setString(1, carinfo.getId());
pstmt.setString(2, carinfo.getCbqc());
pstmt.setString(3, carinfo.getCbjc());
pstmt.setString(4, carinfo.getCd());
pstmt.setString(5, carinfo.getDw());
pstmt.setString(6, carinfo.getXl());
pstmt.setString(7, carinfo.getXh());
pstmt.setString(8, carinfo.getFdjh());
pstmt.setString(9, carinfo.getCjh());
pstmt.setString(10, carinfo.getGysname());
pstmt.setString(11, carinfo.getBz());
pstmt.executeUpdate();
}
catch (Exception e) {
e.printStackTrace();
throw e;
} 展开
3个回答
展开全部
while(rs.next())
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
我估计是不是
String max = rs.getString("maxint"); //获得最大的字段
这句话没有获得到值 导致了 null或者 长度<3
然后下面再 max.substring(2,max.length()); //截取子字符串
就会抛上面的错误
你先确定一下max是不是空
{
String max = rs.getString("maxint"); //获得最大的字段
String maxi = max.substring(2,max.length()); //截取子字符串
newmax = "CB" + String.valueOf(Integer.parseInt(maxi) + 1);
}
我估计是不是
String max = rs.getString("maxint"); //获得最大的字段
这句话没有获得到值 导致了 null或者 长度<3
然后下面再 max.substring(2,max.length()); //截取子字符串
就会抛上面的错误
你先确定一下max是不是空
更多追问追答
追问
我加了个if语句来判断max是否为空,我是想把信息写入数据库,自动生成cbxxxx的样式作为编号。加了判断也错,是不是数据库表的问题呐?tb_car 表ID 为主键,varchar(50)
追答
1 针对于你的需求,可以使用序列。然后你的ID是Varchar型的,将序列转成varchar就可以
2 在程序中使用UUID来获取主键,然后插入到数据库中
3 不仅要判断是不是空,在不是空的情况下还要判断是不是 长度<=2
应该不是数据库表的问题
你看看运行时的sql语句是什么,然后单独执行以下,看看是否报错,
展开全部
String maxi = max.substring(2,max.length());
max字符串需要满足字符串长度大于等于2,包括不能为空值。
这句话之前先进行判读if(max.length()>=2 && max!=null)
max字符串需要满足字符串长度大于等于2,包括不能为空值。
这句话之前先进行判读if(max.length()>=2 && max!=null)
追问
字数限制,接上边追问:第一次插入数据库是成功了,查询时编号为cb1001.第二次插入就报错:违反了 PRIMARY KEY 约束 'PK_TB_CAR'。不能在对象 'tb_car' 中插入重复键。这个问题该怎么解决呢??感激不尽。上边为修改的代码,替换while(){}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是在这一句String maxi = max.substring(2,max.length());截取字符串的时候出错了?
你确定max的长度有3?
你确定max的长度有3?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询