5주차 - 자바 오라클 데이터베이스 (2)

2022. 9. 3. 15:44DataBase/Oracle

CRUD란?

Create

Read

Update

Delete

위의 네가지의 앞자를 따서 CRUD 라고 부른다.

 

데이터베이스에서 테이블에 값을 추가하는 방법은 아래의 구문과 같다

INSERT INTO 테이블 이름 VALUES(저장할 값);

이때, 저장할 값의 순서는 테이블 생성시에 만든 순서, 자료형이 동일해야한다.

 

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

public class Insert {
	public static void main(String[] args) {
		String user = "oracle";
		String password = "oracle";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		Connection con = null;
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디 : "); String id = sc.next();
		System.out.print("비밀번호 : "); String pass = sc.next();
		System.out.print("이름 : "); String name = sc.next();
		
		String sql = "INSERT INTO test VALUES(test_seq.nextval, ?,?,?)";
		PreparedStatement ps = null;
		try {
			con = DriverManager.getConnection(url, user, password);
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			ps.setString(2, pass);
			ps.setString(3, name);
			
			ps.executeUpdate();// INSERT, UPDATE, DELETE
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
        // 아래는 데이터 베이스와의 연결을 끊어주는 코드
        // 연결을 끊지 않으면 메모리를 계속 사용하게되기 때문에 끊어줘야한다.
		try {
			if(ps != null) 
				ps.close();
			if(con != null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

아래는 테이블의 값을 가져오는 방법이다.

데이터베이스에서 테이블의 값을 불러오는 구문은 아래와 같다

SELECT * FROM 테이블이름;

*의 위치에는 불러오고자 하는 COLUMN명을 넣으면 해당 컬럼만 가져올수도 있다.

이름 뒤에 WHERE 키워드를 사용하면 조건을 사용 할 수도 있다.

아래는 예시

public class SelectAll {
	public static void main(String[] args) {
		// 데이터베이스의 모든 정보 출력하기.
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		String user = "oracle";
		String password = "oracle";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		Connection con = null;
		try {
			con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
		String sql = "SELECT * FROM test"; 
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				System.out.println("번호 : " + rs.getInt("num"));
				System.out.println("아이디 : " + rs.getString("id"));
				System.out.println("비밀번호 : " + rs.getString("password"));
				System.out.println("이름 : " + rs.getString("name"));
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		try {
			if(rs != null) 
				rs.close();
			if(ps != null) 
				ps.close();
			if(con != null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

아래는 테이블의 값을 업데이트 하는 방법.

구문은 아래와 같다

UPDATE 테이블 이름 SET 컬럼명=값;

업데이트도 WHERE 과 같은 옵션이 있다.

아래는 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;

public class Update {
	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password=  "oracle";
		String sql = "SELECT count(id) FROM test WHERE id=?";
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디 : "); String id = sc.next();
		
		try {
			con = DriverManager.getConnection(url, user, password);
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if(rs.next()) {
				int row = rs.getInt(1);
				if(row == 1) {
					System.out.print("비밀번호 : "); String pass = sc.next();
					System.out.print("이름 : "); String name = sc.next();
					
					sql = "UPDATE test SET password=?, name=? WHERE id=?";
					ps = con.prepareStatement(sql);
					ps.setString(1, pass);
					ps.setString(2, name);
					ps.setString(3, id);
					ps.executeUpdate();
				}else {
					System.out.println(id + "는/은 등록된 정보가 아닙니다.");
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		try {
			if(rs != null) 
				rs.close();
			if(ps != null) 
				ps.close();
			if(con != null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

마지막으로 DELETE 는 테이블의 값을 삭제한다.

구문은 아래 형식과 같다

DELETE FROM 테이블명;

아래는 사용 예시

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

public class Delete {
	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password=  "oracle";
		String sql = "SELECT password FROM test WHERE id=?";
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디 : "); String id = sc.next();
		
		try {
			con = DriverManager.getConnection(url, user, password);
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			System.out.print("비밀번호 : "); String pass = sc.next();
			ps.setString(2, pass);
			rs = ps.executeQuery();
			if(rs.next()) {
				String row = rs.getString(1);
				if(row.equals(pass)) {
					System.out.print("이름 : "); String name = sc.next();
					
					sql = "DELETE FROM test WHERE id=?";
					ps = con.prepareStatement(sql);
					ps.setString(1, id);
					ps.executeUpdate();
				}else {
					System.out.println(id + "는/은 등록된 정보가 아닙니다.");
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		try {
			if(rs != null) 
				rs.close();
			if(ps != null) 
				ps.close();
			if(con != null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}