我的家園

          我的家園

          JDBC中PreparedStatement中Like后面的參數

          Posted on 2012-04-09 16:51 zljpp 閱讀(972) 評論(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();
              }
          }

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


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


          網站導航:
           
          主站蜘蛛池模板: 伊金霍洛旗| 乐平市| 高邮市| 延长县| 卓尼县| 宜兴市| 繁昌县| 霍城县| 瓦房店市| 台前县| 宁陕县| 府谷县| 中阳县| 兴安盟| 沂源县| 汝阳县| 文登市| 安远县| 永州市| 长葛市| 余干县| 南通市| 阿拉善左旗| 德兴市| 顺义区| 峨眉山市| 澄迈县| 五常市| 怀安县| 新和县| 台山市| 突泉县| 五华县| 侯马市| 湛江市| 巴中市| 南投县| 长子县| 东山县| 德保县| 昌宁县|