java.sql.SQLException问题 10C

如题,这个什么问题?
insert into (abc)(a_NAME,aSYS_VERSION,a_RUNTIME) values(?,?,?)
用的是java ,prepareStatement
报错java.sql.SQLException: Parameter index out of range (0 < 1 )

ps = conn.prepareStatement(sql);
for (int i = 1; i <= mValue.size(); i++) {
String inX = mValue.get(i).toString();

            if (isType.isFloat(inX, "+")) {
                ps.setFloat(i, Float.parseFloat(inX));
                System.out.println(inX + "是浮点<br>");
            } else if (isType.isNum(inX, "+")) {
                ps.setInt(i, Integer.parseInt(inX));
                System.out.println(inX + "是整数<BR>");
            } else if (isType.isValidDate(inX)) {
                String newtime = (String) inX;
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date dateA = format.parse(newtime);
                ps.setDate(i, (java.sql.Date) dateA);
                System.out.println(inX + "是时间<BR>");
            } else {
                ps.setString(i, inX);//是字符串
                System.out.println(inX + "是字符串<BR>");
            }
            //ps.addBatch();
            System.out.println("inx:" + inX);
        }

8个回答

你要解决错误!必须要知道,你报的错是什么意思,从而来进行解决错误!
对于我们程序员而言,第一步学会的不是如何编码,而是如果查找错误,分析理解错误的意思,从而解决错误!
你报的sql语句错误java.sql.SQLException: Parameter index out of range (0 < 1 )意思是参数超出范围!!
就是你填充的字段大于你输入的数据,从而不匹配!从字面上解析来说!
解决方案尝试1:
把insert into (abc)(a_NAME,aSYS_VERSION,a_RUNTIME) values(?,?,?)(有可能你的id不是自增)这段语句在您你数据库执行下,并把数据填充进去,看执行是否正确!
如果错误,看是否是问题所在。如果没有错误!跳到解决方案2
解决方案尝试2:需要你提供部分的全代码 ,你所贴的代码不全!

u014353911
wuruize888 谢谢,讲的真详细
大约 3 年之前 回复

insert into abc(a_NAME,aSYS_VERSION,a_RUNTIME) values(?,?,?)
a,b,c 的括号去了试试

这个 参数 是从0开始的。。。。

miaoch
miaoch 这个参数是从1开始的哦~
大约 3 年之前 回复
u014353911
wuruize888 改了也不行
大约 3 年之前 回复

看哈这个满足你的条件不?http://www.myexception.cn/sql/1938153.html

u014353911
wuruize888 不行
大约 3 年之前 回复

你map的个数和问号的个数不相符吧?断点看看你map中有多少个值

参数你恐怕只传递了一个吧,然后你却是从下表为1开始遍历

看你这个主要是数组越界了

Parameter index out of range (0 < 1 )
其实这个错误是这样造成的
举个例子比如是String你set字段的时候用了 ptm.setString(0, "test");
而PreparedStatement 的下标是从1开始的,所以就会报这个错误。
如果比如你set(4,xxx);就会报Parameter index out of range (4 > number of parameters, which is 3).
多试试就知道了。
楼上说多了个括号,这个也会造成错误,你也得去掉,
不然是会报
You have an error in your SQL syntax;check the manual that corresponds ..................这样一大串的
然后要注意报错的位置。你这个错误应该是报在ptm.setString(0, "test");这一行
而多了个括号的错误会在ptm.execute();这一行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐