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;
}
展开
 我来答
cailovefeng
推荐于2018-02-28 · TA获得超过132个赞
知道答主
回答量:106
采纳率:0%
帮助的人:81.6万
展开全部
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是不是空
更多追问追答
追问
我加了个if语句来判断max是否为空,我是想把信息写入数据库,自动生成cbxxxx的样式作为编号。加了判断也错,是不是数据库表的问题呐?tb_car 表ID 为主键,varchar(50)
追答
1  针对于你的需求,可以使用序列。然后你的ID是Varchar型的,将序列转成varchar就可以

2 在程序中使用UUID来获取主键,然后插入到数据库中

3 不仅要判断是不是空,在不是空的情况下还要判断是不是 长度<=2

应该不是数据库表的问题
你看看运行时的sql语句是什么,然后单独执行以下,看看是否报错,
csu_青苔
2011-04-12 · 超过16用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:48.4万
展开全部
String maxi = max.substring(2,max.length());
max字符串需要满足字符串长度大于等于2,包括不能为空值。
这句话之前先进行判读if(max.length()>=2 && max!=null)
追问
字数限制,接上边追问:第一次插入数据库是成功了,查询时编号为cb1001.第二次插入就报错:违反了 PRIMARY KEY 约束 'PK_TB_CAR'。不能在对象 'tb_car' 中插入重复键。这个问题该怎么解决呢??感激不尽。上边为修改的代码,替换while(){}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tinril
2011-04-12 · 超过21用户采纳过TA的回答
知道答主
回答量:60
采纳率:100%
帮助的人:30.5万
展开全部
是不是在这一句String maxi = max.substring(2,max.length());截取字符串的时候出错了?
你确定max的长度有3?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式