2011-09-06 2 views
0

SQL 서버에 연결하는 드라이버로 JTDS를 사용하고 있습니다.와일드 카드를 사용하여 준비된 문이 특정 행을 반환하지 않지만 쿼리가 모든 행을 반환합니까?

SELECT EmpID,FirstName,LastName,CompanyName,DepartmentName,JobTitle,HireDate FROM Employees where UPPER(FirstName) LIKE 'KEVIN%' 

그것은 SQL Server에서 2 개 행을 반환

다음은 나에게 문제를주고 쿼리입니다. 하나는 대문자에 'KEVIN'이 있고 다른 하나에는 'Kevin'이 있습니다. 와일드 카드를 사용하여 두 결과를 모두 얻었는지 확인했습니다. 내 EmployeeDAO 클래스에서 다음을 사용하고 있습니다.

 ps = con.prepareStatement("SELECT EmpID,FirstName,LastName,CompanyName," 
       + "DepartmentName,JobTitle,HireDate FROM Employees WHERE UPPER(FirstName) LIKE ?"); 
     ps.setString(1, FirstName + "%"); 
     rs = ps.executeQuery(); 

그리고 나서 물론 KEVIN을 내 메인에 넣습니다. 'Kevin'행 하나만 반환합니다.

어떻게 수정하여 모든 행을 반환합니까?

+0

'ResultSet'에서 어떻게 행을 수집하고 있습니까? 문제가있을 가능성이 큽니다. – BalusC

+0

는 시도 유무 : SELECT다는 EmpID, 이름, 성, 회사 명,에 DepartmentName, JobTitle, HIREDATE 종업원 UPPER (FIRSTNAME) UPPER LIKE ('케빈 %') – markus

+0

'동안 (rs.next()) {V FROM .add (새 Employee (rs.getInt ("EmpID"), rs.getString ("FirstName"), rs.getString ("LastName"), rs.getString ("CompanyName"), rs.getString ("DepartmentName") , rs.getString ("JobTitle"), rs.getString ("HireDate"))); }'RS는 결과 집합이고 v는 벡터입니다 – Nimchip

답변

0

조회에 잘 보인다. 문제는 단지 ResultSet에서 행을 수집하는 방법에 있습니다. 이전 행을 다음 행으로 우선 적용하여 컬렉션의 한 행 (마지막 행) 만 남게 할 가능성이 높습니다.

+0

당신은 옳았습니다. 그러나 나는 그 행들을 잘 모으고있었습니다. 내가 엉망진창을 털어 놓았다. 뭐라해도 두뇌 방귀라고 부르지 만 for 루프를 실행하고 1에서 카운터 변수를 시작했습니다. 다시 감사드립니다. – Nimchip

+0

당신은 환영합니다 :) – BalusC

0

SQL Server 설치의 기본 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS이며 대/소문자를 구분하지 않습니다. 쿼리의

변경 정렬 : (나는 그것을 설정하기 전에 매개 변수 값을 대문자 것이 더 강력하게하지만)

SELECT Col1 
FROM Table1 
WHERE Col1 COLLATE Latin1_General_CS_AS LIKE 'KEVIN%' 
+0

슬프게도 SQL Server에서 _is 실제로 _ 대소 문자를 구분하는 이유는 무엇입니까? 왜냐하면 쿼리가 대문자 값을 반환하지 않아서 제가 대개의 경우 값을 반환하지 않았기 때문입니다. – Nimchip

관련 문제