我的家園

          我的家園

          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();
              }
          }

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


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


          網站導航:
           
          主站蜘蛛池模板: 揭西县| 靖西县| 长治市| 镇宁| 社会| 徐汇区| 江阴市| 清涧县| 杭锦旗| 大竹县| 乌拉特后旗| 连云港市| 巴塘县| 稻城县| 腾冲县| 武川县| 广丰县| 汉源县| 拜城县| 永善县| 简阳市| 宁德市| 巢湖市| 教育| 邯郸县| 平陆县| 旬邑县| 双峰县| 灌南县| 武山县| 留坝县| 东阳市| 正宁县| 大埔县| 绥棱县| 漳州市| 遵义县| 德江县| 高平市| 密山市| 紫金县|