JAVA/개념정리

JDBC (DB와 연결)

inderrom 2022. 10. 10. 01:47
package i_jdbc;

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

public class JDBC {

	/*
	 * JDBC(Java Database Connectivity) - 자바와 데이터베이스를 연결해주는 외부 라이브러리 - ojdbc : 오라클
	 * JDBC
	 */

	// JDBC 작성 단계
	// 0. 데이터베이스 접속 정보 입력
	// 1. Connection 생성
	// 2. Statement 생성 (쿼리 Query 생성)
	// 3. Statement 실행 (쿼리 실행)
	// 4. ResultSet에서 결과 추출 (SELECT 경우)
	// 5. ResultSet, Statement, Connection 닫기
	public static void main(String[] args) {
		// 0. 데이터베이스 접속 정보 입력
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "SSR97";
		String password = "java";

		Connection conn = null;
		ResultSet rs = null;
		PreparedStatement ps = null;

		try {
			// 1. Connection 생성
			conn = DriverManager.getConnection(url, user, password);
			// DriverManager : 데이터베이스에 접속하기 위한 드라이버를 관리해주는 클래스
			// .getConnection() : 접속에 알맞은 드라이버 자동 로드

			// 2. Statement 생성 (쿼리 Query 생성)
			String sql = "SELECT * FROM MEMBER"; // 카톡에 쓴내용
			ps = conn.prepareStatement(sql); // 카톡에 내가 할 말 쓴 거

			// 3. Statement 실행 (쿼리 실행)
			// SELECT 인 경우
			rs = ps.executeQuery(); // 카톡을 엔터 눌러서 상대에게 보냄
			// INSERT, UPDATE, DELETE
			// int result = ps.executeUpdate();

			// 4. ResultSet에서 결과 추출 (SELECT 경우)
			// rs index : 0 (next를 만나기 전까지 ) , 포인터 개념
			// 실제 값은 rs가 가지고 있다.
			while (rs.next()) { // rs => row
				String memId = rs.getString("MEM_ID"); // 컬럼명을 이용하는 방식
				String memPass = rs.getString(2); // 컬럼 순서를 이용하는 방식
				// Object o = rs.getInt({COLUMN_NAME}); getObjct로 전부 받을 수 있지만 사용할 땐 형변환을 해줘야한다
				// 모든 속성 타입과 상관 없이 받을 수 있다.
				// int i = rs.getInt({COLUMN_NAME});
				// Date d = rs.getInt({COLUMN_NAME});
				System.out.println("MEM_id : " + memId + ", MEM_PASS : " + memPass);
			}
			// while문은 포인터를(rs) 하나씩 밀려줘서 순번이 끝났을 때 와일문도 끝남

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5. ResultSet, Statement, Connection 닫기
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();

				}
				if (rs != null)
					try {
						rs.close();
					} catch (Exception e) {
					}
				if (ps != null)
					try {
						ps.close();
					} catch (Exception e) {
					}
			}
		}

	}
}
package i_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;

import e_oop.ScanUtil;

public class JDBC2 {
	public static void main(String[] args) {
		// 0. 데이터베이스 접속 정보 입력
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "SSR97";
		String password = "java";

		Connection conn = null;
		ResultSet rs = null;
		PreparedStatement ps = null;

		try {
			// 1. Connection 생성
			conn = DriverManager.getConnection(url, user, password);
		
			// 2. Statement 생성 (쿼리 Query 생성)
			// SELECT * FROM CART WHERE CART_MEMBER='a001'
			String sql = " SELECT * "
					+ " FROM CART "
					+ " WHERE CART_MEMBER=? "; //지금은 뭐가 들어갈지 모르니까 ? 를 넣어준다
			ps = conn.prepareStatement(sql);
			System.out.print("아이디 입력 >>");
			ps.setString(1, ScanUtil.nextLine()); //1번째 물음표에 a001을 넣겠다. setString이면 자동으로 ''로 감싸짐
			// ps.setString(parameterIndex, x);
			// 단, parameterIndex는 1부터 시작
			// ps.setInt(parameterIndex, x);
			// ps.setObject(parameterIndex,x);
			// ps.setDate(1, new Date(new java.util.Date().getTime())); //java.util 이라 써져있지만 임포트할때 java.sql로 임포트 해줘야함
			
			
			// 3. Statement 실행 (쿼리 실행)
			rs = ps.executeQuery();
			
			ResultSetMetaData rsmd = rs.getMetaData(); //쓰려는 테이블에 컬럼이 뭐가 들어있는지 모를 때 써준다
			// 메타데이터 : 데이터에 대한 설명데이터 
			
			//컬럼의 총 갯수 구하는 법
			int columnCount = rsmd.getColumnCount(); 
			for(int i =1; i <= columnCount; i++) {
				System.out.print(rsmd.getColumnName(i) + "\t");
			}
			System.out.println();  
			
			// 4. ResultSet에서 결과 추출 (SELECT 경우)
			while(rs.next()) {
				for(int i = 1; i <= columnCount; i++) {
					//Object o = rs.getObject(i); 인덱스로 가져오는법
					Object o = rs.getObject(rsmd.getColumnName(i)); //컬럼명으로 가져오는법
					System.out.print(o + "\t");
				}
				System.out.println();
			}
			

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5. ResultSet, Statement, Connection 닫기
			if(conn != null) try {conn.close(); }catch(Exception e) {}
			if(rs != null) try { rs.close(); }catch(Exception e) {}
			if(ps != null) try { ps.close(); }catch(Exception e) {}
		}
	}
}

 


package i_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;

import e_oop.ScanUtil;

public class JDBCTest {
	// 0. 데이터베이스 접속 정보 입력
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String user = "SSR97";
	String password = "java";

	Connection conn = null;
	ResultSet rs = null;
	PreparedStatement ps = null;

	public static void main(String[] args) {
		new JDBCTest().start();

	}

	private void start() {
		while (true) {
			showList();
			joinMember();

		}
	}

	private void joinMember() {

		try {
			// 1. Connection 생성
			conn = DriverManager.getConnection(url, user, password);

			// 2. Statement 생성 (쿼리 Query 생성)
			String sql = " INSERT INTO JAVA_MEMBER " + " (MEM_ID, MEM_PASS, MEM_NAME) " // 어디에 뭐가 들어가는지 보기 편하게 쓰는 습관을
																						// 키우자
					+ " VALUES " + " (?, ? , ?) ";
			ps = conn.prepareStatement(sql);

			System.out.println("아이디를 입력 >>");
			String memId = ScanUtil.nextLine();
			System.out.println("비밀번호 입력 >>");
			String memPass = ScanUtil.nextLine();
			System.out.println("이름 입력 >>");
			String memName = ScanUtil.nextLine();

			ps.setString(1, memId);
			ps.setString(2, memPass);
			ps.setString(3, memName);

			// 3. Statement 실행 (쿼리 실행)
			int result = ps.executeUpdate(); // 데이터가 변경 (int로 받는 이유는 변경된 행의 갯수를 보여줌)
			// 영향을 받은 행의 갯수가 리턴된다 // result가 양수라는 것은 업데이트가 성공했다는 뜻임

			if (result > 0) {
				System.out.println("등록 성공!");
			} else {
				System.out.println("등록 실패!");
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5. ResultSet, Statement, Connection 닫기
			if (conn != null)
				try {
					rs.close();
				} catch (Exception e) {
				}
			if (rs != null)
				try {
					rs.close();
				} catch (Exception e) {
				}
			if (ps != null)
				try {
					ps.close();
				} catch (Exception e) {
				}
		}

	}

	private void showList() {
		try {
			// 1. Connection 생성
			conn = DriverManager.getConnection(url, user, password);

			// 2. Statement 생성 (쿼리 Query 생성)

			String sql = "SELECT * FROM JAVA_MEMBER";
			ps = conn.prepareStatement(sql);

			// 3. Statement 실행 (쿼리 실행)
			rs = ps.executeQuery();

			System.out.println("=============== 회원 목록 =================");

			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();
			for (int i = 1; i <= columnCount; i++) {
				System.out.print(rsmd.getColumnName(i) + "\t");
			}
			System.out.println();
			System.out.println("-------------------------------------------");

			// 4. ResultSet에서 결과 추출 (SELECT 경우)
			while (rs.next()) {
				for (int i = 1; i <= columnCount; i++) {
					System.out.print(rs.getObject(i) + "\t");
				}
				System.out.println();
			}
			System.out.println("============================================");

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5. ResultSet, Statement, Connection 닫기
			if (conn != null)
				try {
					rs.close();
				} catch (Exception e) {
				}
			if (rs != null)
				try {
					rs.close();
				} catch (Exception e) {
				}
			if (ps != null)
				try {
					ps.close();
				} catch (Exception e) {
				}
		}

	}
}