class.forName("") → 예외처리가 필요함 ,보통 static {} 내에 들어감
다른 방법)
이 있긴 한데 보통 forName()을 사용한다.
public static void main(String [] args) throws Exception {
System.out.println("데이터베이스 연결을 테스트합니다.");
String url="jdbc:oracle:thin:@localhost:1521/xe";
String user="hr";
String password="hr";
//Connection 생성
Connection con = null;
try {
con=DriverManager.getConnection(url, user, password);
String sql="select employee_id, first_name, salary from employees";
ResultSet rs =stmt.executeQuery();
System.out.println(con);
System.out.println(rs);
}catch(Exception e){
System.out.println(e.getMessage());
}finally {
try {con.close();} catch (Exception e) {
}
}
// Class.forName("oracle.jdbc.OracleDriver");
// DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// System.out.println("드라이버 클래스가 로드되었습니다.");
}
SQL Query 문은 직접 String으로 입력해도 상관없으나, 프로그램의 디버깅등을위해따로변수에저장해서사용하는것이좋다
String sql="select employee_id, first_name, salary from employees";
Statement stmt=con.createStatement()
ResultSet rs =stmt.executeQuery(sql); //결과집합을 받아올 수 있음
System.out.println(rs);
인수로 문자열을 전달할 경우 열의 이름 또는 열 별칭을 지정
select 구문의 열에 수식이 사용될 경우 열 별칭 사용 권장
while(rs.next()) {
System.out.println(rs.getInt("employee_id")+"\t");
System.out.println(rs.getString("first_name")+"\t");
System.out.println(rs.getDouble("salary"));
}
예외 처리블록의 finally 블록에서 리소스를닫아줌.
Connection의 경우 반드시 닫아줘야 함.
Connection이 받환되지 않을 경우Connection 누수현상이 발생할 수
있음
rs.close(); stmt.close(); con.close;
}finally {
try {con.close();}catch(Exception e) {}
}
반복적으로 구조가 같은 SQL문을 실행할 때에 더 나은 성능
바뀔 데이터가 들어갈 자리는 ‘?’으로 표시
파싱하는 시간을 줄이기 위해 만들어짐
String sql = "select first_name, hire_date, salary, department_id "
+ "from employees where department_id=?";
PreparedStatement stmt=con.prepareStatement(sql);
stmt.setInt(1, 60);
ResultSet rs =stmt.executeQuery();
SqlDeveloper로 들어가 프로시저 생성

IN은 입력 파라미터, OUT 출력파라미터. 함수로 해도 가능하다.


제대로 입력이 되었는지 확인하기 위해 구문을 작성해본다.

정상적으로 나옴!

다음과 같이 파일을 추가해주고

CallableStatement 를 사용하여
테이블에 대한 메타정보를 알고싶을 때 사용
ResultSetMetaData : 테이블의 컬럼에 대한 정보
DatabaseMetaData : 데이터베이스에 관한 정보
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class MetaDataExample {
public static void main(String[] args) throws Exception{
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="hr";
String password="hr";
Connection con=DriverManager.getConnection(url,user,password);
String sql="select * from employees";
PreparedStatement stmt=con.prepareStatement(sql);
ResultSet rs=stmt.executeQuery();
ResultSetMetaData metaData=rs.getMetaData(); //메타데이터
int colCount = metaData.getColumnCount();
System.out.println(colCount);
for(int i=1; i<=colCount; i++) {
System.out.println(metaData.getColumnName(i)+" "+metaData.getColumnType(i));
}
}
}
ex) 특정 사원의 정보를 삭제하세요
ERP에 따르면 job_history를 먼저 삭제해야 함
이후에 나오는 delete 기능작성시 확인가능