statement계열의 마지막!!

select구문이 가장 많고 복잡하고 어렵대요....

 

먼저 조금 정리하고 들어가자 !!

 

  자바코드에서 like연산자 사용법
  ※[PreparedStatement객체 사용시]
  **오라클
    LIKE '%A%' :A로 시작하거나 A로끝나거나 A가 중간에 포함되거나
    LIKE '%A' :A로 끝나는 경우
    LIKE 'A%' :A로 시작
   
 **자바
    LIKE  '%' || 'A' || '%'
    LIKE '%' || 'A'
    LIKE 'A' || '%'

ex) 

String sql="SELECT * FROM emp WHERE UPPER(ename) LIKE '%S%'";
String sql="SELECT * FROM emp WHERE UPPER(ename) LIKE '%' || 'S' || '%'";
String sql="SELECT * FROM emp WHERE UPPER(ename) LIKE '%"+getValue("찾을 문자열").toUpperCase()+"%'";
String sql="SELECT * FROM emp WHERE UPPER(ename) LIKE '%' || '"+getValue("찾을 문자열").toUpperCase()+"' || '%'";

 


SELECT문 실행시 실행결과는 ResultSet타입의 객체에 저장됨. 최초 커서는 첫번째 레코드 바로 위에 가 있다.
ResultSet객체의 next()메소드로 커서를 아래로 이동시키면서 더 이상 꺼내올 레코드가 없을 때까지 반복하면서 추출
ResultSet객체의 getXXX()계열 메소드로 해당 레코드의 각 컬럼에 저장된 값을 읽어 온다.
예를들면

   -------------------------------+------------------------------
     ORACLE자료형          |       ResultSet
     -----------------------------+----------------------------
     NUMBER                    |     getInt(인덱스 혹은 컬럼명)
     -------------------------------------+-------------------------------
     CHAR/NCHAR                     |
     VARCHAR2/NVARCHAR2   |     getString(인덱스 혹은 컬러명)
     ---------------------+---------------------------------
     DATE                 |     getDate(인덱스 혹은 컬러명)
     ---------------------+---------------------------------
   인덱스는 SQL에서는 1부터 시작
            ※단,ORACLE의 자료형에 상관없이 getString(인덱스 혹은 컬러명)으로 읽어와도 무방하다.      


 [ 오라클에 저장된 데이타가 없는 경우 즉 null 인 경우 ]
 rs.getInt(인덱스번호 혹은 컬럼명) 는 0 반환    => 근데 이 경우 값이 진짜 0일 때랑 null일 때랑 헷깔릴 수 있음 !!
 rs.getString(인덱스번호 혹은 컬럼명)는 null 반환  => 웬만해선 string 계열로 가져오자!!

 


public class SelectSQL extends IConnectImpl {

	@Override
	public void execute() throws Exception{
     	connect(ORACLE_URL, "scott", "scott");  // 연결
    	try{
                stmt = conn.createStatement(); //객체생성
                try{
                    String sql= " SELECT * FROM emp WHERE UPPER(ename) LIKE '%'|| '"+getValue("찾을 문자열").toUpperCase()+"'||'%'";
                    rs = stmt.executeQuery(sql); // 쿼리실행      
                    while(rs.next()){
                             int empno = rs.getInt(1);
                             String ename = rs.getString("ENAME");
                             String job = rs.getString(3);
                        //	 int comm = rs.getInt("comm");  값이 없는 경우 0 반환됨 그럼 진짜 0이랑 헷깔리겠지? 그래서 이거 잘 안쓰고
                             String comm =rs.getString("comm") == null ? " " : rs.getString("comm");  // 값이 없는 경우를 빈 문자 처리(3항 연산자로 처리!)
                        //	 java.sql.Date hiredate =rs.getDate(5);  
                        //	 String hiredate = rs.getString(5);      연,월,일,시,분,초 까지 나오게 됨..
                             String hiredate = rs.getString(5).substring(0, 10);  // 끝 인덱스는 포함 x 
                             System.out.println(String.format("%-5s%-10s%-10s%-7s%s",
                                                            empno,ename,job,comm,hiredate));						
                                }////while   
                }
                catch(SQLException e){
                    System.out.println("select 쿼리문 실행 오류:"+e.getMessage());
                }
          }
        catch(SQLException e){
             System.out.println("statement 객체 생성 실패");
        }
        finally{
        	close();
        }
    }

	public static void main(String[] args) throws Exception {
		new SelectSQL().execute();
	}
}

+ Recent posts