我的家園

          我的家園

          JDBC中PreparedStatement中Like后面的參數

          Posted on 2012-04-09 16:51 zljpp 閱讀(970) 評論(0)  編輯  收藏

          好久沒發博客,因為解決一些技術問題后要做業務開發。

          可是最近麻煩又來了,在還沒有徹底結束上一個之前,領導把我安排到了新的崗位,我那個郁悶啊。

           

          由于我們的項目不大,所以剛開始決定時我為了省事想用SSH,可是后來覺得只有Struts2好了,后來的查詢等數據庫操作我自己寫方法不行了嘛!

          剛才寫一個公共查詢的方法,在增加參數時出了點錯誤,就是使用模糊查詢時犯暈了。

          我寫的方法如下:

          /**
           * @說明 執行一條查詢SQL語句,可以帶參數
           
          */
          public static List<Object[]> excuteQuery(String sql, Object[] objs) {
              Connection conn = null;
              PreparedStatement psta = null;
              ResultSet rs = null;
              List<Object[]> 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<Object[]>();
                  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) {
                          psta.close();
                      }
                      if (conn != null) {
                          conn.close();
                      }
                  } catch (Exception e2) {

                  }
              }
              return iResult;
          }
           
          后來我輸入這樣的一個參數進行查詢:
          public static void main(String[] args) {
              Object[] para = new Object[]{"c"};
              List<Object[]> 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<Object[]> 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();
              }
          }

          就這么簡單,閑話不說了!


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 资中县| 阳江市| 罗定市| 汝城县| 太湖县| 攀枝花市| 德令哈市| 二连浩特市| 宁德市| 荔浦县| 临澧县| 客服| 巨野县| 宜川县| 崇明县| 吴江市| 肇源县| 屏东县| 苏尼特左旗| 济宁市| 晋中市| 沙田区| 凤庆县| 崇州市| 通州区| 米易县| 洪洞县| 佛冈县| 秦皇岛市| 栾城县| 桐柏县| 万全县| 莱芜市| 平安县| 寻乌县| 平邑县| 常德市| 盈江县| 镇沅| 曲阳县| 忻州市|