JAVA, DB 연동

허니몬·2023년 9월 20일
post-thumbnail

java code 와 db 연동

  1. new java project
  2. package, class 추가

라이브러리 연동 설정 등 확인
jar파일, 드라이버 연동

  • 주의사항 파일 위치 변경 X
  • 한 곳에 모아두는 것이 좋음

  1. 환경변수 설정

DB

CREATE USER DBTEST IDENTIFIED BY a1234;

GRANT CONNECT, RESOURCE TO DBTEST;

ALTER USER DBTEST DEFAULT TABLESPACE USERS;
ALTER USER DBTEST QUOTA UNLIMITED ON USERS;
--- DBTEST 연결
CREATE TABLE MEMBER (
NAME VARCHAR2(20) NOT NULL,
AGE NUMBER(3),
HEIGHT NUMBER(10,2),
LOGTIME DATE
);

DESC MEMBER;
SELECT * FROM MEMBER;

java - ch01_driver


DriverConnect

package ch01_driver;

import java.sql.Connection;
import java.sql.DriverManager;

/*
 * # JDBC ( Java Database Connectivity )
 * - Java 와 DB 연동
 * 
 * # JDBC 드라이버
 * - DBMS 마다 별도의 드라이버가 필요
 * - 프로젝트의 build path 를 사용해서 추가
 * 
 * # JDBC 드라이버 클래스
 * - oracle.jdbc.OracleDriver
 * 
 * # Oracle Database URL
 * - jdbc:oracle:driver_type:@host_name(ip):port:service_name 
 * - jdbc:oracle:thin:@localhost:1521:xe 
 * 
 * 외부에서 DB에 연결시 사용되는 값
 * 외부에서 연결시 계정 user_name, pw, ip, port, SID
 */

/*
 * 
 */
public class DriverConnect {
	public static void main(String[] args) {
		// jdbc 드라이버 로딩
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("로딩 성공");
		} catch (Exception e) {
			System.out.println("로딩 실패 ㅠㅠ");
			e.printStackTrace();
		}

		// 연결정보
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String id = "DBTEST";
		String pwd = "a1234";

		Connection con = null;

		// DB에 연결할 객체 만들기

		try {
			// DB 연결 객체 생성
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("연결 성공");
		} catch (Exception e) {
			System.out.println("연결 실패");
			e.printStackTrace();
		}
		// oci 사용자는 지갑 정보 중요함 잘 관리하기

	}
}

ch02_insert


InsertTest

package ch02_insert;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

/*
 * # JDBC 절차
 * 1. DriverManager 에 해당 DBMS Driver 등록
 * 2. Driver 로 부터 Connection instance 획득
 * 3. Connection 객체의 prepareStatement() 메서드를 사용하여 PreparedStatement 객체 생성
 *  >> pared / pare 주의 
 *  - 각각의 인수에 대해 위치홀더(?) 를 사용해서 SQL 문장을 정의
 * # PreparedStatement : java.sql.PreparedStatement
 * - 쿼리 실행을 위한 class
 * - 쿼리 실행 메서드
 *   > int executeUpdate() : insert, delete, update 문을 실행해서 성공한 행의 수를 반환
 *     ResultSet executeQuery() : select 문을 실행한 결과의 테이블 내용을 ResultSet 에 담아서 봔환
 */

class Insert {
	// 연결 정보
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String id = "DBTEST";
	private String pwd = "a1234";

	public Insert() {
		// jdbc 드라이버 로딩
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("로딩 성공");
		} catch (Exception e) {
			System.out.println("로딩 실패 ㅠㅠ");
			e.printStackTrace();
		}
	} // insert() end

	public Connection getConnection() {
		Connection con = null;
		try {
			// DB 연결 객체 생성
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("연결 성공");
		} catch (Exception e) {
			System.out.println("연결 실패");
			e.printStackTrace();
		}
		return con;
	} // getConnection() end

	// 회원 추가
	public void insertArticle() {
		Scanner sc = new Scanner(System.in);
		System.out.print("이름 입력 > ");
		String name = sc.next();
		System.out.print("나이 입력 > ");
		int age = sc.nextInt();
		System.out.print("키   입력 > ");
		double height = sc.nextDouble();

		Connection con = null;
		PreparedStatement pstmt = null;
		int res = 0;
		try {
			// 질의 문자열
			// 문자열은 나중에 처리할 것 - 보안문제 >> ? 로 처리
			// sql문에 필요한 띄어쓰기만 입력할 것
			String sql = "insert into member values(?,?,?,sysdate)"; // ? : 위치홀더
			con = getConnection(); // connection 객체 생성
			pstmt = con.prepareStatement(sql); // 쿼리문 실행 객체 생성
			pstmt.setString(1, name); // 위치의 index 값은 1부터임 > sql
			pstmt.setInt(2, age);
			pstmt.setDouble(3, height);
			res = pstmt.executeUpdate(); // 쿼리문 실행

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 사용 자원 종료
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
				if (sc != null)
					sc.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		System.out.println(res + "개의 행이 추가 되었습니다~");

	} // insertArticle() end
}

public class InsertTest {
	public static void main(String[] args) {
		Insert data = new Insert();
		data.insertArticle();
	}
}

ch03_select


SelectTest

package ch03_select;

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

class Select {
	// 연결 정보
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String id = "DBTEST";
	private String pwd = "a1234";

	public Select() {
		// jdbc 드라이버 로딩
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("로딩 성공");
		} catch (Exception e) {
			System.out.println("로딩 실패 ㅠㅠ");
			e.printStackTrace();
		}
	} // Select() end

	public Connection getConnection() {
		Connection con = null;
		try {
			// DB 연결 객체 생성
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("연결 성공");
		} catch (Exception e) {
			System.out.println("연결 실패");
			e.printStackTrace();
		}
		return con;
	} // getConnection() end
	
	// 회원 목록
	public void selectArticle() {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet res = null;
		
		try {
			// sql문에 필요한 띄어쓰기만 입력할 것
			String sql = "select * from member";
			con = getConnection();
			pstmt = con.prepareStatement(sql);
			pstmt.executeQuery();
			res = pstmt.executeQuery();
			
			if(res == null) {
				System.out.println("조회된 데이터가 없습니다.");
			} else {
				while(res.next()) {
					String name = res.getString("name");
					int age = res.getInt("age");
					double height = res.getDouble("height");
					String logtime = res.getString("logtime");
					System.out.println(name + "\t" + age + "\t" + height + "\t" + logtime);
					
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(res != null) res.close();
				if(pstmt != null) pstmt.close();
				if(con != null) con.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	} // selectArticle() end
}

public class SelectTest {
	public static void main(String[] args) {
		Select data = new Select();
		data.selectArticle();
	}
}

ch04_update


UpdateTest

package ch04_update;

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


class Update {
	// 연결 정보
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String id = "DBTEST";
	private String pwd = "a1234";

	public Update() {
		// jdbc 드라이버 로딩
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("로딩 성공");
		} catch (Exception e) {
			System.out.println("로딩 실패 ㅠㅠ");
			e.printStackTrace();
		}
	} // Select() end

	public Connection getConnection() {
		Connection con = null;
		try {
			// DB 연결 객체 생성
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("연결 성공");
		} catch (Exception e) {
			System.out.println("연결 실패");
			e.printStackTrace();
		}
		return con;
	} // getConnection() end
	
	// 회원 정보 수정 : 이름으로 조회해서 나이 1살 증가
	public void updateArticle() {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("수정 이름 입력 > ");
		String name = sc.next();
		
		Connection con = null;
		PreparedStatement pstmt = null;
		
		int res = 0;
		try {
			// sql문에 필요한 띄어쓰기만 입력할 것
			String sql = "update member set age=age+1 where name=?";
			con = getConnection();
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, name);
			res = pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(pstmt != null) pstmt.close();
				if(con != null) con.close();
				if(sc != null) sc.close();
				
			} catch (Exception e) {
				
				e.printStackTrace();
			}
			
		}
		System.out.println(res + " 개의 행이 수정되었습니다.");
		System.out.println(name + " 의 나이가 +1 되었습니다.");
	} // updateArticle() end
	

}

public class UpdateTest {
	public static void main(String[] args) {
		Update data = new Update();
		data.updateArticle();
	}
}

ch05_delete


DeleteTest

package ch05_delete;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

class Delete {
	// 연결 정보
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String id = "DBTEST";
	private String pwd = "a1234";

	public Delete() {
		// jdbc 드라이버 로딩
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("로딩 성공");
		} catch (Exception e) {
			System.out.println("로딩 실패 ㅠㅠ");
			e.printStackTrace();
		}
	} // Delete() end

	public Connection getConnection() {
		Connection con = null;
		try {
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("연결 성공");
		} catch (Exception e) {
			System.out.println("연결 실패");
			e.printStackTrace();
		}
		return con;
	} // getConnection() end

	// 회원 삭제 : 이름으로 삭제 진행
	public void deleteArticle() {
		Scanner sc = new Scanner(System.in);
		System.out.print("이름 입력 > ");
		String name = sc.next();

		Connection con = null;
		PreparedStatement pstmt = null;
		int res = 0;
		try {
			String sql = "DELETE FROM MEMBER WHERE NAME=?"; 
			con = getConnection(); 
			pstmt = con.prepareStatement(sql); 
			pstmt.setString(1, name); 
			res = pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 사용 자원 종료
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
				if (sc != null)
					sc.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		System.out.println(res + "개의 행이 삭제 되었습니다~");

	} // deleteArticle() end
}

public class DeleteTest {
	public static void main(String[] args) {
		Delete data = new Delete();
		data.deleteArticle();
	}
}

profile
Fintech

0개의 댓글