DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java开发

JDBC中PreparedStatement中Like后面的参数

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

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

我写的方法如下:

Java代码  
  1. /** 
  2.  * @说明 执行一条查询SQL语句,可以带参数 
  3.  */  
  4. public static List<Object[]> excuteQuery(String sql, Object[] objs) {  
  5.     Connection conn = null;  
  6.     PreparedStatement psta = null;  
  7.     ResultSet rs = null;  
  8.     List<Object[]> iResult = null;  
  9.     Object[] objArr = null;  
  10.     try {  
  11.         conn = getConn(); // 得到链接  
  12.         PreparedStatement state = conn.prepareStatement(sql);  
  13.         if(null != objs){  
  14.             for (int i = 0; i < objs.length; i++) {  
  15.                 state.setObject(i + 1, objs[i]);  
  16.             }  
  17.         }  
  18.         ResultSet resultSet = state.executeQuery(); // 执行查询,返回结果接集合  
  19.         iResult = new ArrayList<Object[]>();  
  20.         int count = resultSet.getMetaData().getColumnCount(); // 一共有多少列数据  
  21.         while (resultSet.next()) {  
  22.             objArr = new Object[count];  
  23.             for (int i = 1; i <= count; i++) {  
  24.                 objArr[i - 1] = resultSet.getObject(i); // 增加到返回的集合中  
  25.             }  
  26.             iResult.add(objArr);  
  27.         }  
  28.     } catch (Exception e) {  
  29.         e.printStackTrace();  
  30.         iResult = null;  
  31.     } finally {  
  32.         try {  
  33.             if (rs != null) {  
  34.                 rs.close();  
  35.             }  
  36.             if (psta != null) {  
  37.                 psta.close();  
  38.             }  
  39.             if (conn != null) {  
  40.                 conn.close();  
  41.             }  
  42.         } catch (Exception e2) {  
  43.   
  44.         }  
  45.     }  
  46.     return iResult;  
  47. }  

 

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

Java代码  
  1. public static void main(String[] args) {  
  2.     Object[] para = new Object[]{"c"};  
  3.     List<Object[]> list = excuteQuery("select * from s_user t where t.userName like '%?%'",para);       
  4.     for (Object[] o : list) {  
  5.         for (Object ob : o) {  
  6.             System.out.print(ob + "-");  
  7.         }  
  8.         System.out.println();  
  9.     }  
  10. }  

 

结果报错如下:

Java代码  
  1. java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).  
  2.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)  
  3.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)  
  4.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)  
  5.     at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3279)  
  6.     at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3263)  
  7.     at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4087)  
  8.     at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3513)  
  9.     at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)  
  10.     at com.nms.common.db.ConnectionManager.excuteQuery(ConnectionManager.java:86)  
  11.     at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:20)  
  12. Exception in thread "main" java.lang.NullPointerException  
  13.     at com.nms.common.db.ConnectionManager.main(ConnectionManager.java:21)  

 

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

Java代码  
  1. public static void main(String[] args) {  
  2.     Object[] para = new Object[]{"%c%"};  
  3.     List<Object[]> list = excuteQuery("select * from s_user t where t.userName like ?",para);       
  4.     for (Object[] o : list) {  
  5.         for (Object ob : o) {  
  6.             System.out.print(ob + "-");  
  7.         }  
  8.         System.out.println();  
  9.     }  
  10. }  

 

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

欢迎大家访问我的博客来和我交流:http://cuisuqiang.iteye.com/

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号