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
*/
'JAVA' 카테고리의 다른 글
[JAVA]return, break, continue 차이 (0) | 2021.06.28 |
---|---|
[JAVA] 시큐어 코딩 - properties 파일 이용 (0) | 2021.06.27 |
[JAVA]자바 싱글톤패턴 예시 (0) | 2021.06.25 |
[JAVA]네트워크, 프로토콜, properties 객체 (0) | 2021.06.25 |
[JAVA] 멀티 스레드, 스레드 동기화 구현하기 (0) | 2021.06.24 |