자바 JDBC로 데이터를 조회하는 Select문 활용

안녕하세요

이번 시간에는 테이블의 데이터를 조회 할 수 있는 데이터베이스의 Select문을

자바에 접목하여 자바에서도 오라클에 있는 db 정보를 조회 할 수 있는 예제를 올려봅니다.

잘 봐주세요~!!


=========================================================

public class test {

public static void main(String[] args) throws Exception {

//1. 드라이버 로딩 - odjbc7.jar
//=> Class.forName("패기지경로.드라이버명")메소드를 이용
// 자바와 오라클의 통역관(OracleDriver)
Class.forName("oracle:jdbc:driver:OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
//프로토콜:oracle:드라이버타입:@호스트:포트번호:SID
//url은 DBMS사마다 다르다.
String user="scott", pwd="tiger";
//2. DB와 연결: DriverManager.getConnection()
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB연결됨");

//3. DB에 SQL문을 전송하기 위해 Statement 객체를 얻어온다.
Statement stmt = con.createStatement();

//4. SQL문 작성
String sql = "SELECT idx, name, msg, wdate FROM memo ORDER BY 1";
//DML 문장(INSERT, DELETE, UDPATE) => int executeUpdate(sql) / 반환 타입 int
//DQL 문장(SELECT문)=> ResultSet executeQuery(sql) / 반환 타입 ResultSet

//5. sql문을 DB에 전송(실행)
ResultSet rs = stmt.executeQuery(sql); // 결과 테이블 반환
System.out.println("--------------------------------------------------");
System.out.println("idx"+"\t"+"name"+"\t"+"msg"+"\t\t"+"wdate");
//ResultSet의 메소드
/*boolean next() : rs의 논리적 커서는 첫번째 행의 직전에 위치한다
=> before first
next()가 호출되면 커서를 다음으로 이동시킨다.
이동시켜 가리키는 지점에 레코드가 있으면 true를 반환, 없으면 false를 반환한다.
---------------------------------
자료형 getXXX("컬럼명") : 해당 컬럼 값을 꺼낼 때 호출
이 때 오라클 자료형과 자바 자료형을 맞춰서 꺼내오자
*/

while(rs.next()){// memo 테이블 1번 레코드 직전에 위치해서 next가 다음 칸으로 이동(첫번째 행을 가리킴)
// 메모 테이블에 컬럼 데이터를 뽑아오기
int idx=rs.getInt("idx"); // memo 테이블에 글번호값 받기
String name=rs.getString("name"); // 작성자
String msg=rs.getString("msg"); // 메모 내용
java.sql.Date wdate = rs.getDate("wdate"); //작성일
System.out.println(idx+"\t"+name+"\t"+msg+"\t"+wdate);
}

System.out.println("--------------------------------------------------");

//6. DB자원 반납 - 순서 지켜야 함
rs.close();
stmt.close();
con.close();
}
}

========================================================

위의 문장을 실행하면 아래와 같습니다.

memo 테이블에 있는 idx, name, msg, wdate 컬럼을 가지고 와 출력하면서

프로그램은 종료됩니다.


위의 예제는 사용자가 프로그램에 직접 개입하지 않고 단순히 조회하는 예제입니다

하지만 다음 예제는 사용자가 작성자 명을 입력하면 그 영역을 찾아주는 예제입니다

위의 예제와 비슷합니다만 그래도 유용합니다



검색할 작성자명에 '길' 이라는 키워드를 입력하면

이름에 '길' 이 들어가 있는 데이터 영역 다 보여주기

========================================================


public class test {

public static void main(String[] args) throws Exception {

Class.forName("oracle:jdbc:driver:OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scott", pwd="tiger";
Connection con = DriverManager.getConnection(url,user,pwd);
System.out.println("DB연결됨");

Statement stmt = con.createStatement();

String input_name = JOptionPane.showInputDialog("검색할 작성자명을 입력하세요");

// 특정 작성자가 쓴 글만 출력하세요 => where절 select문
//String sql = "SELECT idx,name,msg,wdate FROM memo WHERE name = " + "'"+input_name+"'";

// '길' 자가 입력되면 홍길동, 김길동.. 글이 모두 나오게.
String sql2 = "SELECT idx,name,msg,wdate FROM memo"
+" WHERE name LIKE '%" + input_name +"%'";

ResultSet rs = stmt.executeQuery(sql2);
System.out.println("----"+input_name+"님 글 검색 결과-------");
while(rs.next()){

int idx=rs.getInt(1);
String name=rs.getString(2);
String msg=rs.getString(3);
Date wdate=rs.getDate(4);
System.out.println(idx+"\t"+name+"\t"+msg+"\t"+wdate);
}

System.out.println("------------------------------");

// 순서 지켜야함
rs.close();
stmt.close();
con.close();

}
}


========================================================


위의 소스 코드를 실행하면 아래 그림과 같습니다



'길' 이라는 단어를 입력하면..



Memo 테이블에 name 필드에 '길' 이라는 이름이 전부 다 조회된다






댓글 없음:

댓글 쓰기