-부모클래스 super class
-자식클래스 sub class
-부모클래스에있는 코드와 로직을 물려받아 자식클래스에 확장시킨 것
-새로운 클래스에 클래스명 뒤에 extends 물려받을 클래스명
-부모클래스 필드에 private 을 하면 상속이 안된다.
-Object : 모든 클래스의 최고 위에 있는 부모 -> 내가 클래스에서 따로 상속을 하지 않는 한 모든 클래스는 이 클래스를 상속받음
-Java에서 동시에 두 개 이상의 클래스를 동시에 상속 받을 수 없음 단, 연속 상속은 가능 ex) A < - B <- C
-부모클래스 안에 있는 메소드를 다시한번 자녀클래스에서 재구현한것
-조건 : 부모클래스의 있는 메소드 형태가 완전 동일해야함
-실행순서에 의해 자녀클래스의 메소드로 실행된다.
-자동완성 : alt shift s => override implement methoids... super.method 가 나옴. 오버라이딩하려면 지우기
-but 자식에서 새롭게 구현한 메소드는 실행안됨
-부모타입으로 업캐스팅이 되어도 자식 클래스에서 부모클래스에서 있는 메소들을 재정의한(오버라이드) 메소드가 있다면 재정의한 메소드가 호출됨
자바에서 DB에 접속하기 위해 사용되는 API
java에서 입력받은 정보들을 DB로 넘겨주기
프로젝트파일에서 오른쪽버튼 > Build Path > Configure Build Path > Libraries탭 > Add External Jar > c드라이브에 오라클 에서 JDBC 폴더에서 ojdbc6.jar 선택!
JDBC를 연결하고자 하는 자바 프로젝트에 ojdbc6.jar 파일 추가하기
1. JDBC DRIVER 로딩 - 드라이브 동적 로딩 -> try/catch 진행 자바와 디비를 이어주는 통로
-ojdbc6.jar 추가 (위에 사전 수행작업으로 설명)
-class.forName() 메소드 사용
2. DB 접근하기위한 로그인 정보 전송하기
-Connection 생성
3. db에 sql문 전송
-PreparedStatement 생성
executeUpdate (); 테이블의 값이 바뀌는 경우. 삽입(insert), 삭제, 수정 ---> 데이터 변동이있을때
executeQuery(); 테이블에 영향이 없을 때. 조회할때.
-반환값이 ResultSet이라는 테이블 형태로 돌아옴
4. 연결종료
-finally라는 키워드로 객체가 열린 순서의 역순으로 다시 닫아주기
finally는 에러가 나도 무조건 실행되어야하는 구문
try문 안에 있는 객체가 지역변수이기 때문에 전부 다 바깥으로 빼주기-> 레퍼런스변수는 초기값으로 null을 부여해주자
-try/catch 문 종료된 마지막에 ! 객체 닫아주기
회원가입시스템 JDBC
//1. 드라이브 동적 로딩 -> try/catch 진행 자바와 디비를 이어주는 통로
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// 이 경로를 통해 sql문을 전송시키겠다
//2. DB 접근하기위한 로그인 정보 전송하기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
// 주소 쉽게 따올수있어서 외우지말기
String db_id = "hr";
String db_pw = "hr";
Connection conn = DriverManager.getConnection(url, db_id, db_pw);//자바와 db를 연결해주는 객체생성 java.sql로 import --->오류 발생 ~~surrounding try클릭해주기
if (conn != null) {
System.out.println("데이터베이스 연결 성공!");
}
// 3.db에 sql문 전송/ 전송 전 DB에서 테이블 먼저 생성해야됨
String sql = "insert into memberInfo values(?, ?, ?, ?)"; // 데이터가 들어갈내용, values 개수 테이블컬럼개수와 같아야됨
PreparedStatement psmt = conn.prepareStatement(sql); // 자바와 db 정보 전달자 생성하기
psmt.setString(1, id); //(인덱스번호-?의 개수와 순서에 맞춰야한다, ?자리에 입력할 값) 값은 스캐너로 입력받음
psmt.setString(2, pw);
psmt.setString(3, name);
psmt.setInt(4, age);
//사용자가 입력한 내용들 sql문에 연결해주기
// 자바에서는 오라클에서 ;과 엔터처럼 실행을 나타내는 실행 명령을 줘야됨
int cnt = psmt.executeUpdate(); // sql문을 실제로 실행시키기 위한 명령
if (cnt > 0) {
System.out.println("회원가입 성공!");
}
//4.사용된 객체들 연결 종료하기
if(psmt != null) { //한번이라도 실행이됐더라면
psmt.close();
}if(conn != null) {
conn.close();
}
}
catch (ClassNotFoundException e) {
// class.forName()에 관한 catch문
System.out.println("드라이버오류");
e.printStackTrace(); //오류발생시 캐치
}
catch (SQLException e) {
// getConnection()에 관한 catch문
System.out.println("DB 로그인 오류");
e.printStackTrace();
}
셀렉트문으로 조회해 입력받은 값을 DB에서 가져오기 예제
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 Ex_Select {
public static void main(String[] args) {
// 전역변수로 쓰기위해
ResultSet rs = null;
// 반환값은 ResultSet으로 돌아옴-테이블 형태로
PreparedStatement psmt = null;
Connection conn = null;
//레퍼런스형 기본 초기값 : null
Scanner sc = new Scanner(System.in);
System.out.print("아이디 : ");
String search_id = sc.next();
System.out.print("비밀번호 : ");
String search_pw = sc.next();
// 1.드라이버 로딩
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2 DB 연결 url, id, pw 작성
// 심부름꾼 conn 객체 생성, conn활용해 정보 넘기기 (DriverManager -> getConnection
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_id = "hr";
String db_pw = "hr";
conn = DriverManager.getConnection(url, db_id, db_pw);
// 3.sql문 작성 memberInfo테이블에 있는 조건에 맞는 정보 출력하기
String sql = "select * from memberInfo where id=? and pw=?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, search_id);
psmt.setString(2, search_pw);
rs = psmt.executeQuery();
while (rs.next()) {
String id = rs.getString(1);
String pw = rs.getString(2);
String name = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id + "/" + pw + "/" + name + "/" + age);
}
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 오류");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("DB오류");
e.printStackTrace();
}
// try/catch문 이후 마지막에 한번 객체 닫아주기
// 4.연결 종료
finally {
try {
if (rs != null) {
rs.close();
}if(psmt != null) {
psmt.close();
}if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}