JDBC 에서 Prepared Statement 에서 Like 뒤의 인자

오랫동안 블 로 그 를 보 내지 않 았 는데,기술 문 제 를 해결 한 후에 업무 개발 을 해 야 하기 때문이다.
여러분 이 제 블 로 그 를 방문 하여 저 와 교류 하 시 는 것 을 환영 합 니 다.http://cuisuqiang.iteye.com/
그런데 최근 에 문제 가 또 생 겼 어 요.지난 일이 완전히 끝나 기 전에 지도자 가 저 를 새로운 자리 에 배 치 했 어 요.저 는 답답 해 요.
 
우리 의 프로젝트 가 크 지 않 기 때문에 처음에 결정 할 때 나 는 일 을 절약 하기 위해 SSH 를 사용 하고 싶 었 다.그러나 나중에 Struts 2 만 좋 았 다 고 생각 했다.나중에 조회 등 데이터 베 이 스 를 조작 하면 내 가 직접 쓰 는 방법 이 안 되 잖 아!
방금 공공 조회 방법 을 썼 는데 파 라 메 터 를 추가 할 때 오류 가 발생 했 습 니 다.바로 모호 한 조 회 를 사용 할 때 어 지 러 웠 습 니 다.
내 가 쓴 방법 은 다음 과 같다.
/**
 * @         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();
	}
}

 
이렇게 간단 하 니 잡담 은 그만 두 자!
 
ITEYE 에 가서 제 오리지널 작품 을 보 세 요.http://cuisuqiang.iteye.com
또는 저 를 지원 하 는 개인 블 로그,주소:http://www.javacui.com

좋은 웹페이지 즐겨찾기