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();
}
}
'학원 > JDBC' 카테고리의 다른 글
10/24 27-7(DeleteSQL.prepared) (0) | 2022.10.24 |
---|---|
10/24 27-6 (inserSQL.prepared) (0) | 2022.10.24 |
10/24 27-4 (insertSQLAutoGeneratedKeys) (0) | 2022.10.24 |
10/24 27-3 (UpdateSQL.statement) (0) | 2022.10.24 |
10/24 27-2 IConnect(SQL 연결 및 실행 메소드로 빼기) (0) | 2022.10.24 |