2010-07-01 5 views
-3

환자 테이블의 상담 필드 인 s 문자열을 수락 한 후 의사 테이블에서 최소 의사 ID를 반환하는 함수입니다. 예를 들어 필드에 "심장학"이라고 쓰면 그 필드와 관련된 최소 의사 ID가 반환됩니다.JDBC 문제에 대한 도움말

또한 의사가 무료이거나 아닌지 여부는 현재 상태로 결정됩니다.

기본적으로 의사는 무료이며 할당 후 yes로 변경됩니다.

SQL 문에 문제가 있습니다.

public int getDocID(String s) 
{ 
    int did = 0; 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     Connection con = 
      DriverManager.getConnection("jdbc:odbc:patientDSN"); 
     Statement stat = con.createStatement(); 
     ResultSet rs = 
      stat. 
      executeQuery 
      ("select min(Doc_ID) from Doctor where (Doc_CurrentStatus='No' and Doc_Speciality like '%" 
      + s + "'%'"); 
     if (rs.next()) { 
      did = rs.getInt(1); 
     } 
     System.out.println(did); 
     PreparedStatement ps1 = 
      con. 
      prepareStatement 
      ("UPDATE Doctor SET Doc_CurrentStatus='Yes' where Doc_ID = " 
      + did + ""); 
     ps1.executeUpdate(); 
    } 

    catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return did; 
} 
+0

잘 포맷해야합니다. 어떤 DBMS를 사용하고 있습니까? 무슨 커넥터 요? StackTrace 붙여 넣기 – santiagobasulto

답변

3

당신은 당신이 필요로하는 것보다 하나의

'

인용 더 있습니다. 그것은 지난

"%"

백분율 기호 전에이다. 마지막 괄호도 닫아야합니다. PrepareStatement를 살펴 보는 것이 좋습니다. Java Tutorial

ResultSet rs = stat.executeQuery(
    "select min(Doc_ID) from Doctor where (
     Doc_CurrentStatus='No' and Doc_Speciality like '%"+s+"%' 
    )" 
); 

링크는이 쿼리를 수행 할 수 있습니다

select Doc_ID from Doctor where (Doc_CurrentStatus='No' and Doc_Speciality like '%"+s+"%') ORDER BY Doc_ID ASC LIMIT 1"); 

는 peformance을 향상시킬 수 있습니다.

+0

thanksss! 그것은 일했다! –

+0

다행입니다. ORDER BY 절을 사용하여 쿼리를 변경 했습니까? – santiagobasulto

+2

@aashima, SO! 이 답을 자신의 문제를 해결 한 것으로 만족하면 - 마치 당신처럼 보이지만 투표 카운터 아래의 체크 표시를 클릭해야합니다. 시스템에 허용 된 것으로 표시되며 산티아고에게 15 명의 담당자와 2 명의 담당자와 배지를 제공합니다. 모두가 이긴다! – Pops