JDBC PreparedStatement Like参数报错解决方案

网友投稿 281 2022-11-15


JDBC PreparedStatement Like参数报错解决方案

由于我们的项目不大,所以刚开始决定时我为了省事想用SSH,可是后来觉得只有Struts2好了,后来的查询等数据库操作我自己写方法不行了嘛!

刚才写一个公共查询的方法,在增加参数时出了点错误,就是使用模糊查询时犯晕了。

我写的方法如下:

/**

* @说明 执行一条查询SQL语句,可以带参数

PXQQjDuyu */

public static List excuteQuery(String sql, Object[] objs) {

Connection conn = null;

PreparedStatement psta = null;

ResultSet rs = null;

List iResult = null;

Object[] objArr = null;

try {

conn = getConn(); // 得到链接

PreparedStatement state = conn.prepareStatement(sql);

if(null != objs){

for (int i = 0; i < objs.length; i++) {

state.setObject(i + 1, objs[i]);

}

}

ResultSet resultSet = state.executeQuery(); // 执行查询,返回结果接集合

iResult = new ArrayList();

int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列数据

while (resultSet.next()) {

objArr = new Object[count];

for (int i = 1; i <= count; i++) {

objArr[i - 1] = resultSet.getObject(i); // 增加到返回的集合中

}

iResult.add(objArr);

}

} catch (Exception e) {

e.printStackTrace();

iResult = null;

} finally {

try {

if (rs != null) {

rs.close();

}

if (psta != null) {

PXQQjDuyu psta.close();

}

if (conn != null) {

conn.close();

}

} catch (Exception e2) {

}

}

return iResult;

}

后来我输入这样的一个参数进行查询:

public static void main(String[] args) {

Object[] para = new Object[]{"c"};

List list = excuteQuery("select * from s_user t where t.userName like '%?%'",para);

for (Object[] o : list) {

for (Object ob : o) {

System.out.print(ob + "-");

}

System.out.println();

}

}

结果报错如下:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)

at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3279)

at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3263)

at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4087)

at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3513)

at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)

at com.nms.common.db.ConnectionManager.excuteQuery(ConnectionManager.java:86)

at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:20)

Exception in thread "main" java.lang.NullPointerException

at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:21)

后来才知道,模糊查询时要这样写:

public static void main(String[] args) {

Object[] para = new Object[]{"%c%"};

List list = excuteQuery("select * from s_user t where t.userName like ?",para);

for (Object[] o : list) {

for (Object ob : o) {

System.out.print(ob + "-");

}

System.out.println();

}

}

就这么简单,闲话不说了!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Compare And Swap底层原理及代码示例详解
下一篇:JDBC查询Map转对象实现过程详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~