Parameter index out of range (1 > number of parameters, which is 0)排错合集!java的路上总

179 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

S Q L 中 ? 不匹配问题

(观看提醒:数据库:MySql8.0版本,驱动:5.1.4.7,jdk:MyEclipse 自带;对mybatis也有帮助)

报错

Parameter index out of range (1 > number of parameters, which is 0)

我的目的:通过while循环连接数据库,调取所有含有关键字的Newsname;

//原代码 conn =DaoConnect.getConnect(); String sql="SELECT * FROM news WHERE NewName LIKE '%?%'"; pt=conn.prepareStatement(sql);

pt.setString(1,string) ; rs=pt.executeQuery();

for (String string : str) { while(rs.next()){ KW=new KW_packeg(rs.getString("NewName"),rs.getString("NewLink"), rs.getString("PublishTime")); list.add(KW); } }

首先,报错后,经过长达6个小时的搜索奋战,网上出现的以下解决方案都没解决问题:

格式错误 :?中文 ? 英文

mybatis中:“xml被注释掉的的SQL代码中含有获取值得表达式 ,例如:/id=#{params.id}/或者/id=’${params.id}’/都会抛出此异常”

sql语句中**没有?**号,在后面用到了set语句。

“连接已经关闭。 如果与其他操作语句一起公用conn时,如果上一操作已经关闭连接,则会报错。表现为:时而能够进行操作,时而不能。”

在java中的预编译prepareStatement中:查询的写法:

SELECT * FROM news WHERE NewName = '****'//sql语句
String sql="SELECT * FROM news WHERE NewName = '?';//错误
String sql="SELECT * FROM news WHERE NewName = ?;//正确,因为加了单引号会当成参数处理

还不对!!!!!!!!!

因为我是模糊查询!Sql是长这样的:“SELECT * FROM news WHERE NewName LIKE ‘%***%’ ”

网上有这样的答案:在预编译语句中写成这样:’%’,?,’%‘

等等等等这样的格式问题,查询语句依然与占位符不匹配。

后来在大佬的远程协助下,发现一个问题,就是连接要写在循环里,即使你的循环体中只有一个值;

image.png

for (String string : str) {
    //所有东西放进循环体
					conn =DaoConnect.getConnect();				
					String sql="SELECT * FROM news WHERE NewName LIKE ?";
					pt=conn.prepareStatement(sql);
					//激动,终于查到了:不加单引号
					pt.setString(1,"%"+string+"%") ;
					rs=pt.executeQuery();

					while(rs.next()){
						KW=new KW_packeg(rs.getString("NewName"),rs.getString("NewLink"),rs.getString("PublishTime"));							
						System.out.println(rs.getString("NewName"));	
						list.add(KW);
					}
				}

此时,错误终于变了,,,变成了空指针,所以看来首当其冲的竟然不是格式问题。

继续,,,,改变格式,,,都不行。

于是,我把Like后面的一片都扣出来!!

在pt.setString里去拼接字符串!;

String sql="SELECT * FROM news WHERE NewName LIKE ?"; pt.setString(1,"%"+string+"%") ;

image.png 结果来了:成功完活;

结语:可喜可贺,虽然这个小问题排错的时间说出来都丢人,但是在排错中还是有很多收获。写文记录与君共享。

特此鸣谢在java起步路上热心指导的乔帮主。