JDBC 연습: 데이터 검색(SELECT)


예제) 데이터베이스의 테이블로부터 조건에 맞는 데이터를 읽는 프로그램


import java.sql.*;


public class JDBCExample3 {


public static void main(String args[]) {


String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "SELECT CODE, NAME, PRICE, MAKER " + "FROM GOODSINFO WHERE NAME = ";


Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;


try {

Class.forName(driver);

conn = DriverManager.getConnection(url, "st02", "st02");

pstmt = conn.prepareStatement(sql + "'전자사전'"); // '' 안의 상품명을 갖는 행만 읽기

rs = pstmt.executeQuery();


System.out.println("상품코드 상품명 \t\t 가격 제조사");

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


while (rs.next()) {

String code = rs.getString("CODE");

String name = rs.getString("NAME");

int price = rs.getInt("PRICE");

String maker = rs.getString("MAKER");

System.out.printf("%s %s \t%12d %s%n", code, name, price, maker);

}

}

catch (Exception e) {

System.out.println(e.getMessage());

}

finally {

try {

pstmt.close();

conn.close();

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

}


결과) 오라클에서 SELECT CODE, NAME, PRICE, MAKER " + "FROM GOODSINFO WHERE NAME = '전자사전'

이라는 SQL 명령어를 친 것과 똑같은 결과물이 자바에서 출력된다.


상품코드 상품명 가격 제조사

-------------------------------------------------------

10004 전자사전      180000 아이리버




응용) 위의 프로그램을 수정하여 상품명을 입력받아 데이터를 검색하는 프로그램을 만들자.


import java.sql.*;

import java.util.*; 


public class JDBCExample3_21_4 {


public static void main(String args[]) {

Scanner scan = new Scanner(System.in);


String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "SELECT CODE, NAME, PRICE, MAKER " + "FROM GOODSINFO WHERE NAME = ";


Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;


try {

Class.forName(driver);

conn = DriverManager.getConnection(url, "st02", "st02");

System.out.print("검색할 상품명: "); // 검색할 상품명을 입력받아서

String goodsName = scan.nextLine(); // goodsName에 담는다.

pstmt = conn.prepareStatement(sql + "'" + goodsName + "'"); 

// SQL문에서 문자열을 감싸는 작은 따옴표를 큰 따옴표로 감싸 꼭 포함시켜야 한다.

rs = pstmt.executeQuery();

System.out.println("상품코드 상품명 \t\t 가격 제조사");

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

while (rs.next()) {

String code = rs.getString("CODE");

String name = rs.getString("NAME");

int price = rs.getInt("PRICE");

String maker = rs.getString("MAKER");

System.out.printf("%s %s \t%12d %s%n", code, name, price, maker);

}

}

catch (Exception e) {

System.out.println(e.getMessage());

}

finally {

try {

pstmt.close();

conn.close();

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

}


결과) 검색할 상품명을 입력하면 해당 상품의 코드, 상품명, 가격, 제조사가 정상 출력된다.

검색할 상품명: 전자사전

상품코드 상품명 가격 제조사
-------------------------------------------------------
10004 전자사전      180000 아이리버



응용2) 위의 프로그램은 상품명이 정확해야만 검색이 된다. 상품명 앞글자를 입력하면 검색이 되도록 수정

package 연습;


import java.sql.*;

import java.util.*; 


public class JDBCExample3_21_4b {


public static void main(String args[]) {

Scanner scan = new Scanner(System.in);

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "SELECT CODE, NAME, PRICE, MAKER " + "FROM GOODSINFO WHERE NAME LIKE ";


Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;


try {

Class.forName(driver);

conn = DriverManager.getConnection(url, "st02", "st02");

System.out.print("검색할 상품 앞글자: ");

String goodsName = scan.nextLine(); 

pstmt = conn.prepareStatement(sql + "'" + goodsName + "%'");

rs = pstmt.executeQuery();

System.out.println("상품코드 상품명 \t\t 가격 제조사");

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

while (rs.next()) {

String code = rs.getString("CODE");

String name = rs.getString("NAME");

int price = rs.getInt("PRICE");

String maker = rs.getString("MAKER");

System.out.printf("%s %s \t%12d %s%n", code, name, price, maker);

}

}

catch (Exception e) {

System.out.println(e.getMessage());

}

finally {

try {

pstmt.close();

conn.close();

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

}


SELECT CODE, NAME, PRICE, MAKER

FROM GOODSINFO 

WHERE NAME LIKE '문자열%'

이 SQL 구문을 활용한다.

결과)

검색할 상품명: 디


상품코드 상품명 가격 제조사

-------------------------------------------------------

10001 디지털TV      350000 LG

10003 디지털 카메라      210000 삼성




Posted by netyhobby
,