Java JDBC

4067 ワード

Java Database Connectivity
 - 자바와 데이터베이스를 연결해주는 라이브러리
 - ojdbc : 오라클 JDBC
	 
JDBCを作成するには
1. Connection 생성(DB연결): 오라클과 자바 연결
2. Statement 생성(쿼리 작성): 실행 결과가 자바로 넘어옴
3. Query 실행
4. ResultSet에서 결과 추출(select인 경우)
5. ResultSet, Statement, Connection 닫기
package k_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC {
public static void main(String[] args) {
作成//データベース接続情報
String url = "jdbc:oracle:thin:@localhost:1521:xe";
//ドライバ(異なる子供をつなぐ中間ブリッジ)名情報@接続アドレス(ローカルホスト:ポート:sld)
String user = "JSG99";
String password = "java";
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
1.接続の作成(DB接続)
	try {
		con = DriverManager.getConnection(url, user, password);
		
2.ステータスの作成(クエリーの作成):実行結果をJavaに移行
		String sql = "select * from member"; //select 쿼리
		ps = con.prepareStatement(sql); 
              //ps에 쿼리에 대한 정보가 담겨있음
		
3.クエリー1:selectの実行--結果セット(現在のクエリー状況)を返します.
		rs = ps.executeQuery();
		//쿼리 실행2:insert, update, delete -- int 리턴 받음
		int result = ps.executeUpdate(); // 영향 받은 행의 개수를 리턴
		
4.ResultSetから結果を抽出(selectの場合)
	 while(rs.next()) {
		 //next()를 호출하면 첫번쩨 행을 바라봄 그게 반복되면 2,3행을 바라봄
         : 다음 행이 있는지 없는지를 보면서 알려줌(다음행이 있으면 true, 없으면 false)
		 String memId = rs.getString(1); 
         //getString: 가져올 값의 타입을 정의하는 것 / (1): 첫번째 컬럼
		 String memPass = rs.getString("MEM_PASS");//("MEM_PASS"): 컬럼명
		 
		 System.out.println("MEM_ID: "+memId+" / MEM_PASS: "+memPass); 
		 
	 }
	
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	//DriverManager : 드라이버 관리 클래스에 getConnection메서드 호출
		
// 5. ResultSet、Statement、Connectionを閉じる
	}finally {
		if(rs != null) try {rs.close(); }catch(Exception e) {}
		if(ps != null) try {ps.close(); }catch(Exception e) {}
		if(con != null) try {con.close(); }catch(Exception e) {}
	}
    }
}
しゅつりょく
 package k_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class JDBC2 {

public static void main(String[] args) {
	// 작성 예
	// 데이터베이스 접속 정보  3가지가 필요
	String url = "jdbc:oracle:thin:@localhost:1521:xe";  
    // 골뱅이 앞 부분은 드라이버 뒤는 오라클의 호스트이름 포트 SID 를 차례대로 입력
	String user = "JSG99";
	String password = "java";
	
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
 // 변수 만들고 드라이브 를 관리해주는 드라이브매니저와 겟 커넥션 메소드 사용해서 커넥션 값 받기
	try {
		con = DriverManager.getConnection(url, user, password);
		
		String sql = "select * from cart where cart_member = ? and cart_qty > ?";   
        // 보통 where 절에는 값이 와야하는데 ? 를 사용하면 ?에 동적으로 값만 넣어줄 수 있음.
		ps = con.prepareStatement(sql);
		ps.setString(1, "a001");   
        // 첫번째 물음표에 a001 이라는 값을 넣겠다는 뜻.
		ps.setInt(2, 5);  
        // 두번째 물음표에는 5라는 int 값을 넣겠다.
 //			ps.setObject(3,  10);  타입에 상관없이 ? 에 값을 넣어 줄 수 있음.
		
		rs = ps.executeQuery();
		
	**	// 뽑아올 컬럼의 개수 알아오기/**
		ResultSetMetaData metaData = rs.getMetaData();  // 메타데이터 : 데이터에 대한 데이터
		int columnCount = metaData.getColumnCount(); // 컬럼의 수
		
		while(rs.next()){
			for(int i = 1; i <= columnCount; i++){
				Object value = rs.getObject(i);
				System.out.print(value + "\t");
			}
		System.out.println();
		}
		
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		if(rs != null) try { rs.close(); } catch(Exception e) {}    // 값이 들어있는 객체만 뽑기.
		if(ps != null) try { ps.close(); } catch(Exception e) {}
		if(con != null) try { con.close(); } catch(Exception e) {}
	}

	
	
	
}}