원2 2021. 4. 9. 16:18
728x90
반응형

오라클 코드

create table student(
sno number primary key,
name varchar2(20),
major varchar2(50),
gender varchar2(5));

insert into student values(1,'LEE','AA','a');
insert into student values(2,'LET','BB','a');
insert into student values(3,'LED','CC','a');
insert into student values(4,'LEA','DD','a');
insert into student values(5,'LEB','EE','a');

select * from student;
commit;

package jdbcPro1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;

public class ConnTest {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("명령 입력:1:select, 2:inset, 3:update, 4:delete , 5:exit");
			int n = sc.nextInt();

			DAOPro dao = DAOPro.getInstance(); // dao를 얻어옴
			switch (n) {
			case 1:
				List<Student> list = dao.select();
				for (int i = 0; i < list.size(); ++i) {
					System.out.println(list.get(i));
				}
				break;
			case 2:
				System.out.print("학번 :"); // print만 쓰면 콜솔창에 커서가 깜빡거리면서 입력이 가능.
				int sno = sc.nextInt();
				System.out.print("이름 :");
				String name = sc.next();
				System.out.print("전공 :");
				String major = sc.next();
				System.out.print("성별 :");
				String gender = sc.next();
				dao.insert(new Student(sno, name, major, gender)); // insert 에 입력된값을 다시 출력.
				break;

			case 3:
				System.out.print("학번 :"); // print만 쓰면 콜솔창에 커서가 깜빡거리면서 입력이 가능.
				sno = sc.nextInt();
				Student st = dao.selectOne(sno); // selectOne을 사용해서 수정값을 확인.
				System.out.println(st);
				System.out.print("이름 :");
				name = sc.next();
				System.out.print("전공 :");
				major = sc.next();
				System.out.print("성별 :");
				gender = sc.next();
				dao.update(new Student(sno, name, major, gender));
				break;

			case 4:
				System.out.println("학번 : ");
				sno = sc.nextInt();
				dao.delete(sno);
				break;
			default:
				break;

			}
			if (n == 5)
				break;

		}

	}
}

package jdbcPro1;

public class Student {
	private int sno;
	private String name;
	private String major;
	private String gender;
	
	
	public Student() {  // 디폴트 생성자
		
	}
	
	public Student(int sno, String name, String major, String gender) {
		super();
		this.sno = sno;
		this.name = name;
		this.major = major;
		this.gender = gender;
	}

	public int getSno() {
		return sno;
	}

	public void setSno(int sno) {
		this.sno = sno;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}
	
	@Override
	public String toString() {
		return "Student [sno= " + sno + ", name= " + name + ", major= " + major + ", gender= " + gender + "]";
	}

	public static void main(String[] args) {
	
		
	}
	

}

package jdbcPro1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DAOPro {

	private DAOPro() {
	}

	private static DAOPro dao = new DAOPro();

	public static DAOPro getInstance() {
		return dao;
	}

	private Connection getConnection() {

		String driverName = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "LWY";
		String pw = "qqqq";
		Connection conn = null;

		try {
			Class.forName(driverName);
			System.out.println("드라이브 로드 성공");
			conn = DriverManager.getConnection(url, user, pw);
			System.out.println("DB접속 성공");

		} catch (ClassNotFoundException e) {
			System.out.println("드라이브 로드 실패");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("db접속 오류");
			e.printStackTrace();
		}
		return conn;
	} // DB와 연결하기 위한 코드

	public Student selectOne(int sno) { // 수정 내용을 한번 확인 하고 싶을 때 쓸 Method
		Connection conn = null; // sno를 가져온이유는 프라이머리 key 이기 때문에
		PreparedStatement ps = null;
		ResultSet rs = null;
		Student student = null;
		// 여기서 값을 정하지 않은 이유는 selectOne Method 는student의 하나의
		// 확인용이고 하나의 값을 가져오기 위해서
		String sql = "select * from student where sno=?";

		try {
			conn = getConnection(); // conn안에 getConnection을 집어놓고
			ps = conn.prepareStatement(sql);
			ps.setInt(1, sno);
			rs = ps.executeQuery(); // 쿼리문들 받아옴.
			if (rs.next()) { // 여기서는 한번만 확인을 할거기 때문에
				student = new Student(); // Student객체를 만들어주고 인스턴스 변수이기때문에
				student.setSno(rs.getInt("sno")); // 가져올 부분을 선택.
				student.setName(rs.getString("name"));
				student.setMajor(rs.getString("major"));
				student.setGender(rs.getString("gender"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			db_close(conn, ps, rs); // 닫아주는것.
		}

		return student; // 다되면 리턴값으로 가져감 여기서는 student 하나만 가져갈거임
	}

	public void delete(int sno) {
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "delete from student where sno=?";
		// 쿼리문 그리고 =? 는 정확하게 값을 입력 하지 않겠따.
		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, sno);
			int n = ps.executeUpdate();
			if (n == 1)
				System.out.println("삭제 성공");
			else
				System.out.println("삭제 실패");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			db_close(conn, ps);
		}

	}

	public void update(Student student) { // update Method
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "update student set name=?, major=?, gender=? where sno=?";
		// 업데이트문 값만 들어오면 된다. sql문이라서 오타가 나면 안된다 여기는, 문자열이 아닌 sql쿼리문임.
		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			ps.setString(1, student.getName());
			ps.setString(2, student.getMajor());
			ps.setString(3, student.getGender());
			ps.setInt(4, student.getSno());
			int n = ps.executeUpdate();
			if (n == 1) {
				System.out.println("update 성공");
			} else {
				System.out.println("update 실패");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			db_close(conn, ps);
		}

	}

	public void insert(Student student) { // 입력 함수
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "insert into student values(?,?,?,?)";

		try {
			conn = getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, student.getSno());
			ps.setString(2, student.getName());
			ps.setString(3, student.getMajor());
			ps.setString(4, student.getGender());

			int n = ps.executeUpdate();
			if (n == 1) {
				System.out.println("데이터 입력 성공");
			} else {
				System.out.println("데이터 입력 실패");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			db_close(conn, ps);
		}
	}

	public List<Student> select() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		List<Student> list = new ArrayList<>(); // 리스트 객체를 생성한다.ㄴ
		String sql = "select * from student";

		try {
			conn = getConnection(); // conn안에 getConnection을 집어놓고
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql); // 쿼리문들 받아옴.
			while (rs.next()) { // 쿼리문을 읽어올거다. while은 객체가 있는 동안 실행이고
				Student s = new Student(); // Student객체를 만들어주고 인스턴스 변수이기때문에
				s.setSno(rs.getInt("sno")); // 가져올 부분을 선택.
				s.setName(rs.getString("name"));
				s.setMajor(rs.getString("major"));
				s.setGender(rs.getString("gender"));
				list.add(s);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			db_close(conn, stmt, rs); // 닫아주는것.
		}

		return list; // 다되면 리턴값으로 가져감
	}

	private void db_close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if (conn != null)
				conn.close();
			if (stmt != null)
				stmt.close();
			if (rs != null)
				rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void db_close(Connection conn, Statement stmt) {
		try {
			if (conn != null)
				conn.close();
			if (stmt != null)
				stmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
728x90
반응형