22.11.24 java & DB(Oracle) 연동
package db; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//DB연결을 위한 클래스이다.
public class DBConnectionTest {
public static void main(String[] args) {
//변수는 맨 위에 먼저 선언해주면서 변수끼리 묶어주면 된다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user = "scott";
String password = "tiger";
Connection conn=null;
//1. JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("ClassNotFoundException발생 e=");
e.printStackTrace();
}//문제가 왜 발생이 됐는지 원인에 대한 트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !
System.out.println("1. JDBC Driver 등록 - 성공");
//2. 연결 Connection 얻기
// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}
System.out.println("2. 연결 Connection 얻기 성공!");
//3. 객체준비 - Statement객체, PreparedStatement객체
//4. 쿼리 실행
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념
try {
if(conn!=null){
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("5. 자원반납 진행");
}
}
package db; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//scott의 emp테이블에 데이터입력 작업을 위한 클래스이다.
//Statement객체를 이용한 insert문 실행
public class InsertEx01 {
public static void main(String[] args) {
//변수는 맨 위에 먼저 선언해주면서 변수끼리 묶어주면 된다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user = "scott";
String password = "tiger";
Connection conn=null;
Statement stmt =null;
//1. JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver 등록 - 성공");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("ClassNotFoundException발생 e=");
e.printStackTrace();
}//문제가 왜 발생이 됐는지 원인에 대한 트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !
//2. 연결 Connection 얻기
// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}
//3. 객체준비 - Statement객체
try {
stmt = conn.createStatement();
System.out.println("3. 객체 준비 완료!");
} catch (SQLException e1) {
e1.printStackTrace();
}
//4. 쿼리 실행
//query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!
int eno = 9004;
String empName = "이강인";
int salary = 3000;
double commission = 1500; //1500.0
String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
"values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";
//executeUpdate()메소드를 호출하면
//주어진 SQL문(insert, update, delete)이 실행되고
//실행된 레코드수가 리턴된다.
//executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴
try {
int resultCnt = stmt.executeUpdate(sql);
System.out.println("4. 쿼리문 실행!!");
System.out.println("쿼리문 실행결과로 받은 record 수 = "+resultCnt);
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
try {
if(stmt!=null) {
stmt.close();
}
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package db; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
//scott의 emp테이블에 데이터입력 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 insert문 실행
public class InsertEx02 {
public static void main(String[] args) {
//변수는 맨 위에 먼저 선언해주면서 변수끼리 묶어주면 된다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user = "scott";
String password = "tiger";
Connection conn=null;
Statement stmt =null;
PreparedStatement pstmt=null;
//1. JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver 등록 - 성공");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("ClassNotFoundException발생 e=");
e.printStackTrace();
}//문제가 왜 발생이 됐는지 원인에 대한 트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !
//2. 연결 Connection 얻기
// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}
//3. 객체준비 - PreparedStatement객체
String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
"values(?, ?, ?, sysdate, ?, ?)";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";
try {
//stmt = conn.createStatement();
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
} catch (SQLException e1) {
e1.printStackTrace();
}
//4. 쿼리 실행
//query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!
// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";
//executeUpdate()메소드를 호출하면
//주어진 SQL문(insert, update, delete)이 실행되고
//실행된 레코드수가 리턴된다.
//executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴
try {
//int resultCnt = stmt.executeUpdate(sql);
//PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery()
//?개수만큼 set설정해야한다.
//set데이터타입 (?순서, 값);
pstmt.setInt(1, 9004);
pstmt.setString(2, "이강인");
pstmt.setString(3, "관리자");
pstmt.setInt(4, 3300);
pstmt.setInt(5, 1555);
int resultCnt = pstmt.executeUpdate();
System.out.println("4. 쿼리문 실행!!");
System.out.println("쿼리문 실행결과로 받은 record 수 = "+resultCnt);
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//프리페어드 스테이트먼트 사용시 입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
try {
if(pstmt!=null) {
pstmt.close();
}
// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package db; //변수선언->입력->작업->출력
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
//scott의 emp테이블에 데이터삭제 작업을 위한 클래스이다.
//PreparedStatement객체를 이용한 delete문 실행
public class InsertEx03 {
public static void main(String[] args) {
//변수는 맨 위에 먼저 선언해주면서 변수끼리 묶어주면 된다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
String user = "scott";
String password = "tiger";
Connection conn=null;
Statement stmt =null;
PreparedStatement pstmt=null;
//1. JDBC Driver등록
try {
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("1. JDBC Driver 등록 - 성공");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("ClassNotFoundException발생 e=");
e.printStackTrace();
}//문제가 왜 발생이 됐는지 원인에 대한 트레이스로 출력!!! 문제 파악하려는 것!!문제가 발생하면 캐치절로 !
//2. 연결 Connection 얻기
// DriverManager.getConnection(url, user, password)
// DriverManager.getConnection(연결DB서버url, 접속user명, 접속유저password)
// String url = "jdbc:oracle:thin:@localhost:1521/xe";
// String url = "jdbc:oracle:thin:@172.30.1.69:1521/xe";
// String url = "jdbc:oracle:thin:@127.0.0.1:1521/xe";
// String user = "scott";
// String password = "tiger";
// Connection conn=null;
try {
// Connection conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection(url, user, password);
System.out.println("2. 연결 Connection 얻기 성공!");
} catch (SQLException e) {
System.out.println("SQLException 발생");
e.printStackTrace();
}
//3. 객체준비 - PreparedStatement객체
String sql = "delete from emp " +
"where empno= ?";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";
try {
//stmt = conn.createStatement();
pstmt = conn.prepareStatement(sql); //프리페어드스테이트먼트는 미리 값을 받아 처리 하기 때문에 sql을 해당 구문 전에 선언해야한다.
System.out.println("3. 객체 준비 완료!");
} catch (SQLException e1) {
e1.printStackTrace();
}
//4. 쿼리 실행
//query문에 ;미포함, 작은따옴표, 공백, 괄호 등등 주의 => 실행가능한 쿼리문!
// int eno = 9004;
// String empName = "이강인";
// int salary = 3000;
// double commission = 1500; //1500.0
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values("+eno+", '"+empName+"', 'MANAGER', sysdate, "+salary+", "+commission+")";
// String sql = "insert into emp(empno, ename, job, hiredate, sal, comm)" +
// "values(9004, '손흥민', 'MANAGER', sysdate, 3000, 1500)";
//executeUpdate()메소드를 호출하면
//주어진 SQL문(insert, update, delete)이 실행되고
//실행된 레코드수가 리턴된다.
//executeQuery(select문) : select 쿼리문 실행. 실행결과를 ResultSet 리턴
try {
//int resultCnt = stmt.executeUpdate(sql);
//PreparedStatement 객체를 실행하기전에 (executeUpdate() 혹은 executeQuery()
//?개수만큼 set설정해야한다.
//set데이터타입 (?순서, 값);
pstmt.setInt(1, 9004);
// pstmt.setString(2, "이강인");
// pstmt.setString(3, "관리자");
// pstmt.setInt(4, 3300);
// pstmt.setInt(5, 1555);
int resultCnt = pstmt.executeUpdate();
System.out.println("4. 쿼리문 실행!!");
System.out.println("쿼리문 실행결과로 받은 record 수 = "+resultCnt);
} catch (SQLException e1) {
System.out.println("executeUpdate()실행관련 에러");
e1.printStackTrace();
} //실행결과가 몇행적용됐는지 행수가 리턴, create alter drop -->ddl 문이면 리턴 없음!
//프리페어드 스테이트먼트 사용시 입력값 변수 선언 필요 없이 set메소드로 세팅해주면 되고 sql 값을 3단계에서 미리 받기 때문에 4단계에서는 필요가 없이 그냥 빈()값으로 실행한다.
//5. 자원반납 --> 생략가능 하지만 사실 하면 안되는 개념 (제일 처음 객체를 생성 한 것을 제일 나중에 close)
try {
if(pstmt!=null) {
pstmt.close();
}
// if(stmt!=null) {
// stmt.close();
// }
if(conn!=null) {
conn.close(); //null이 아닐때만 클로즈하도록 if문 추가 안하면 null exception 발생, 위에 로그인시 문제가 발생해서 conn참조변수에 주소지 자체가 담기지 못하면 null인 상태인데
} //이상태에서 클로즈 하면 널 익셉션 발생! 그래서 정상적으로 로그인되어 참조변수에 주소지가 담겼을때만 크롤징하도록 if문 추가
System.out.println("5. 자원반납 진행");
} catch (SQLException e) {
e.printStackTrace();
}
}
}