JDBC(Java Database Connectivity)

자바 어플리케이션에서 표준화된 데이터베이스 접근 => 패키지-> import java.sql

각 DB접속에 대한 상세한 정보를 알 필요 없이 어플리케이션에서 DB변경시 JDBC 드라이버만 교체하면 된다

접속할 데이터베이스의 드라이버 필요

- 오라클-> 오라클 driver -> ojdbc6.jar(11g기준)

- MySQL-> mysql~.bin.jar

 

오라클의 설치시 제공되는 위치

C:\oracle\product\11.2.0\dbhome_1\jdbc\lib

 

ORACLE DB 연결된 상태 )

JDBC드라이버 로딩 -> Connection객체 생성 

import java.sql.*;
public class DBTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection con = null;
		//주소형식)jdbc:oracle:thin:@원격ip주소:접속포트번호:SID
		String url="jdbc:oracle:thin:@localhost:1521:orcl";
	
		try {
			//1.접속할 드라이버를 메모리에 올리기
            //JDBC\ojdbc6\oracle\jdbc\driver\OracleDriver경로에 있음
			Class.forName("oracle.jdbc.driver.OracleDriver");
            
			//2.접속하기위해서 getConnection(1.오라클 위치 2.접속계정명 3.암호)
            //DriverManager클래스의 정적메소드
			con = DriverManager.getConnection(url,"scott","tiger");
			System.out.println("접속 con=>"+con);
		}catch(Exception e) {//SQLException
			System.out.println("DB연결 실패=>"+e);
		}
	}
}
/*
접속 con=>oracle.jdbc.driver.T4CConnection@4629104a
*/

*SID: 독자적인 서비스가 가능한 DB인스턴스 하나 

 

DB연결실패=> java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

1. 오타

2. 드라이버가 실제 존재해야 되는데 이 드라이버가 없기때문에 에러 발생

1) 이클립스 먼저 종료하고 설정, jdk\jre\lib\ext 에 ojdbc6.jar 파일 넣기

-> 안되는 경우 2)

2) 직접 자바프로젝트를 불러와서 처리

프로젝트 우클릭>Build Path>Configure Build Path>Libraries>Add External JARs>ojdbc6.jar선택

Referenced Libraries에 추가된거 확인

 


sql문을 데이터베이스에 보내기위한 객체

1. Statement 객체

2. PrepareStatement 객체( 권장 )

 

SQL문장 실행

executeQuery()메소드

select구문 실행 등 테이블의 구조에 영향을 미치지 않는 sql구문에 사용

select문일때, 리턴값은 ResultSet클래스의 인스턴스로 접근

executeUpdate()메소드

insert,update,delete문 등 테이블 구조에 영향을 미치는 sql구문에 사용

리턴값은 처리된 데이터 수를 정수형으로 반환(실행 성공 여부 확인 가능)

 

select구문의 결과를 표형태로 담을 객체( ResultSet 객체 rs)

rs.first() : 첫번째 레코드로 이동 

rs.previous() : 이전 레코드로 이동 

rs.next() : 다음 레코드로 이동 

rs.last() : 마지막 레코드로 이동 

 

문자형 칼럼

rs.getString(index) or getString("칼럼명")

숫자형 칼럼

rs.getInt(index) or getInt("칼럼명")

rs.getFloat(~)

rs.getDouble(~)

 

예시) 

ResultSet rs = pstmt.executeQuery();

while(rs.next()){
	name=rs.getString("name");
    age=rs.getInt("age");
}

rs.close();
pstmt.close();//stmt.close()
Conn.clost();

 

import java.sql.*;
public class DBSelect {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection con = null;
		String url="jdbc:oracle:thin:@localhost:1521:orcl";
		
		//sql문을 데이터베이스에 보내기위한 객체(stmt,pstmt)
		//pstmt/stmt객체 하나당 sql구문 하나씩 담음
		Statement stmt =null;//create~
		PreparedStatement pstmt=null;//insert~
		Statement stmt2=null;//select ~
		
		ResultSet rs =null;//select구문의 결과를 표형태로 담을 객체
		String sql="";
		
		try {
        	//1.접속할 드라이버를 메모리에 올리기
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.접속하기위해서 getConnection(1.오라클 위치 2.접속계정명 3.암호)
			con = DriverManager.getConnection(url,"scott","tiger");
			System.out.println("접속 con=>"+con);
			
			//3.create table 
			stmt=con.createStatement();
			sql="create table MyTest(name varchar2(20),age number)";
			int create=stmt.executeUpdate(sql);
			System.out.println("테이블 성공유무(create)=>"+create);
			
			//4.insert->prepareStatement(?: 외부에서 값을 넣어준다는 표시)
			pstmt=con.prepareStatement("insert into MyTest values(?,?)");
			//형식)pstmt객체명.setString(?의순서,저장할값)
			pstmt.setString(1, "hong");//첫번째?,즉 name
			pstmt.setInt(2, 23);//두번째?,즉 age
			int insert=pstmt.executeUpdate();//1:성공, 0:실패
			System.out.println("데이터 입력성공유무(insert)=>"+insert);
			
			//5.select->statement
			stmt2=con.createStatement();
			rs=stmt2.executeQuery("select * from MyTest");
			//while구문으로 내용 출력
			while(rs.next()) {//rs.next()==true 즉, 이동시킬 레코드가 존재한다면
				String name=rs.getString("name");
				int age=rs.getInt("age");
				System.out.println("name=>"+name+",age=>"+age);
			}
		}catch(Exception e) {//SQLException
			System.out.println("DB연결 실패=>"+e);
		}finally {
			try{
				//6.메모리해제->에러유발과 상관없이 반드시 처리하고 프로그램 종료해야함
				//생성된 객체의 역순으로 메모리를 해제
				//생성된 순서: con->stmt->pstmt->stmt2->rs
				rs.close();
				stmt2.close();
				pstmt.close();
				stmt.close();
				con.close();
			}catch(Exception e){}
		}
	}
}
/*
접속 con=>oracle.jdbc.driver.T4CConnection@4629104a
테이블 성공유무(create)=>0
데이터 입력성공유무(insert)=>1
name=>hong,age=>23
*/

 

+ Recent posts