[JAVA] JDBC

heubanufi·2024년 2월 15일

JAVA

목록 보기
7/10

JDBC 이용한 DB 연동 프로그래밍 작성 절차

  1. JDBC 라이브러리 개발환경 설정(빌드경로에 등록)
  2. JDBC 드라이버 로딩
  3. DB연결 - Connection 객체 생성 <- DriverManager
  4. Statement 문 실행(SQL 문 실행)
  5. SQL 실행 결과에 대한 처리
    • SELECT : 조회(검색) 데이터 결과 값에 대한 처리
    • INSERT, UPDATE, DELETE : int 값(건수) 처리
  6. 클로징 처리에 의한 자원 반납

1. JDBC 드라이버 로딩

		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println(">> 드라이버 로딩 성공");
		} catch (ClassNotFoundException e) {
			System.out.println("[예외] 드라이버 로딩 실패");
			e.printStackTrace();
		}

2. DB연결 - Connection 객체 생성 <- DriverManager

		Connection conn = null;
		try {
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:xe",
					"mystudy","pw");
			System.out.println(">>DB연결성공");
		} catch (SQLException e) {
			System.out.println("[예외]DB 연결 실패");
			e.printStackTrace();
		}

3. Statement문 실행 (SQL문 실행)

		Statement stmt = null;
		ResultSet rs = null;
		try {
			//Connection객체로부터 Statement 객체 생성
			stmt = conn.createStatement();
			String sql = "" 
					+ "SELECT ID, NAME, KOR, ENG, MATH, TOT, AVG "
					+ " FROM STUDENT "
					+ " ORDER BY ID";
			rs = stmt.executeQuery(sql);
			System.out.println(">>SQL 실행 성공" + rs);
		} catch (SQLException e) {
			System.out.println("[예외]SQL 실행 실패" + e.getMessage());
			e.printStackTrace();
		}

4. SQL 실행 결과에 대한 처리

		System.out.println(">>SELECT 결과에 대한 처리");
		try {
			while(rs.next()) {
				System.out.print(rs.getString("ID") + "\t");
				System.out.print(rs.getString("NAME") + "\t");
				System.out.print(rs.getInt("KOR") + "\t");
				System.out.print(rs.getInt("ENG") + "\t");
				System.out.print(rs.getInt("MATH") + "\t");
				System.out.print(rs.getInt("TOT") + "\t");
				System.out.print(rs.getDouble("AVG"));
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

5. 클로징 처리에 의한 자원 반납

		try {
			if(rs != null) rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(stmt != null) stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		try {
			if(conn != null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

위 과정을 하나의 try~catch문으로 정리한 코드

SELECT

		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			//1. jdbc 드라이버 로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println(">> 드라이버 로딩 성공");
			
			//2. db연결
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:xe",
					"mystudy","pw");
			System.out.println(">>DB연결성공");
			
			//3. Statement문 실행 (SQL문 실행)
			//Connection객체로부터 Statement 객체 생성
			stmt = conn.createStatement();
			String sql = "" 
					+ "SELECT ID, NAME, KOR, ENG, MATH, TOT, AVG "
					+ " FROM STUDENT "
					+ " ORDER BY ID";
			rs = stmt.executeQuery(sql);
			System.out.println(">>SQL 실행 성공" + rs);
			
			//4. SQL 실행 결과에 대한 처리
			System.out.println(">>SELECT 결과에 대한 처리");
			while(rs.next()) {
				String str = ""
						+ rs.getString("ID") + "\t"
						+ rs.getString("NAME") + "\t"
						+ rs.getInt("KOR") + "\t"
						+ rs.getInt("ENG") + "\t"
						+ rs.getInt("MATH") + "\t"
						+ rs.getInt("TOT") + "\t"
						+ rs.getDouble("AVG") + "\t";
				System.out.println(str);
			}
		} catch (ClassNotFoundException e) {
			System.out.println("[예외] 드라이버 로딩 실패");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("[예외]SQL Exception" + e.getMessage());
			e.printStackTrace();
		} finally {
			//5. 클로징 처리에 의한 자원 반납
			try {
				if(rs != null) rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(stmt != null) stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			try {
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

INSERT

		Connection conn = null;
		Statement stmt = null;
		
		
		try {
			//1.
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:xe",
					"mystudy","pw");
			//3.
			stmt = conn.createStatement();
			
			String sql = "";
				sql += "INSERT INTO STUDENT ";
				sql += "   (ID, NAME, KOR, ENG, MATH, TOT, AVG) ";
				sql += "  VALUES ('2024003', '김유신', 100, 100, 100, 0, 0) ";
				System.out.println("sql: " + sql);
				
				int result = stmt.executeUpdate(sql);
			
			//4.
			System.out.println("처리건수: " + result);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//5.
			try {
				if(stmt != null) stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			try {
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

SELECT와 같으나 3번 SQL문 실행 부분을 INSERT INTO로 작성함

			//3.
			stmt = conn.createStatement();
			
			String sql = "";
				sql += "INSERT INTO STUDENT ";
				sql += "   (ID, NAME, KOR, ENG, MATH, TOT, AVG) ";
				sql += "  VALUES ('2024003', '김유신', 100, 100, 100, 0, 0) ";
				System.out.println("sql: " + sql);
				
				int result = stmt.executeUpdate(sql);

UPDATE

			//3.
			stmt = conn.createStatement();
			
			String sql = "";
				sql += "UPDATE STUDENT ";
				sql += "SET KOR = 10,";
				sql += "	ENG = 15,";
				sql += "   	MATH = 25 ";
				sql += "WHERE ID = '2024005' ";
				System.out.println("sql: " + sql);
				
				int result = stmt.executeUpdate(sql);

DELETE

			//3.
			stmt = conn.createStatement();
			String sql = "";
				sql += "DELETE FROM STUDENT ";
				sql += " WHERE ID = '2024005' ";
				System.out.println("sql: " + sql);
			
			int result = stmt.executeUpdate(sql);
            

유의사항

JAVA에서 데이터를 조작했을 때 결과가 처리되지 않는 경우: SQL에서 데이터를 조작하고 COMMIT 또는 ROLLBACK을 하지 않아 LOCK이 걸림, SQL에서 COMMIT, ROLLBACK을 실행하면 JAVA에서 정상적으로 처리됨을 확인할 수 있었음 / JAVA에서는 AUTOCOMMIT 됨

0개의 댓글