Oracle XE와 Oracle Developer를 다운받는다. OracleXE 설치함
이후 커맨드라인 띄운다.
root 로 연결
conn sys as sysdba;
hr 계정 unlock
alter user hr account unlock;
alter user hr identified by hr
여기까지 하고,
conn hr/hr;
하면 connected. 뜬다.
이후 쿼리문 날린다.
이렇게 하면 테이블에서 여러가지 해볼 수 있다.
여기서 계정 생성하나 해본다.
scott 계정생성과 권한부여
create user scott identified by tiger default tablespace users temporary tablespace temp;
grant connect,resource to scott;
이후 oracle developer실행해본다.
여기서 컬럼, 데이터, 쿼리문 등을 볼 수 있다.
아니면 질의작성기에서 쿼리문 날려봐도된다.
이후 jdbc드라이버가 필요하다.
보통은 오라클 설치하면 들어있따.
여기 있는 걸 자바 프로젝트에 복붙
여기다가 jar파일 add해준다.
jdbc coding 순서
자바에서 new 해서 객체 생성하는 것처럼 oracle은 아래와 같이 객체 생성한다.
Class.forName("oracle.jdbc.driver.OracleDriver);
Forname이라는 메서드 이용해서 하는 이유는 종속성을 없애기위해..
doc에서 lang에 가면 forName이 있다.
주어진 이름으로 클래스나 인터페이스의 클래스를 반환..
객체 생성하는것이다.
lang.Thread주고 해도 된다...
클래스 이름을 문자열로 줄 수 있어서 나중에 외부 파일로 문자열만 빼면되니까.. 종속성이 없어진다...
그래서 이렇게하는거다
properties만들어서 나중에 밖으로 뺄거다..
그래서... 이클립스에서 이제 연동할거다...
프로젝트하나 생성하고..
아래와 같이 해준다...
package jdbc.app;
public class EmployeesSelectTest {
public static void main(String[] args) {
//1. Driver Class loading
try {
Class driver = Class.forName("oracle.jdbc.OracleDriver");
System.out.println(driver.getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
이러면 결과는 이렇게 나온다..
다음 순서는 Connection 만들어주는것이다...
DriverManager.getConnection()이 함수를 써서 Connection instance 획득해야댄다
//2. connection, DB와의 연결을 담당하는 Connection 객체를 생성한다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user = "hr";
String pw = "hr";
// DriverManager 의 getConnection()메서드가 T4CConnection 객체를 생성하므로
// Factory Method이다.
// 우리가 배운대로 하면..
// Connection con = new T4CConnection;
// 와 같이 써줘야하는데...
// 왜 이렇게 쓰냐면...
// 아까 말했듯이 벤더 종속적인 방식의 코딩이대면안대기때문이다..
try {
Connection connection = DriverManager.getConnection(url,user,pw);
System.out.println(connection.getClass().getName());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
자바는 하면서 느끼는거지만 함수 사용법이 맞아도 예외처릴 안하면 컴파일타임에 에러를띄운다..
이게 나같은 초보들한텐 좋은 것 같다..
나중에 실력이 더 늘었을 때에는 어떨 지 모르겠다.
여기서 얼마전 강의들었던 Iterator 와 비슷한 개념이쓰임..
// 3번째 스텝, SQL문을 전송해주는 statement 객체를 생성..
// createStatement()라는 함수를 팩토리 메서드라고한다.
stmt = con.createStatement();
System.out.println(stmt.getClass().getName());
// 4. 4번쨰 Step은... SQL 전송 단계이다..
ResultSet resultSet = stmt.executeQuery(sql);
System.out.println(resultSet.getClass().getName());
while(resultSet.next()) {
int emp_id = resultSet.getInt("employee_id");
String name = resultSet.getString("first_name");
Date date = resultSet.getDate("hire_date");
float salary = resultSet.getFloat("salary");
System.out.println(emp_id + "\t" + name + "\t" + date + "\t" + salary);
}
try {
// 5. 사용했던 객체를 닫아주어야 한다..
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
전체 소스코드
package jdbc.app;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class EmployeesSelectTest {
public static void main(String[] args) {
// 1. Driver Class loading
try {
Class driver = Class.forName("oracle.jdbc.OracleDriver");
System.out.println(driver.getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 2. connection, DB와의 연결을 담당하는 Connection 객체를 생성한다.
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user = "hr";
String pw = "hr";
String sql = "select * from employees";
// DriverManager 의 getConnection()메서드가 T4CConnection 객체를 생성하므로
// Factory Method이다.
// 우리가 배운대로 하면..
// Connection con = new T4CConnection;
// 와 같이 써줘야하는데...
// 왜 이렇게 쓰냐면...
// 아까 말했듯이 벤더 종속적인 방식의 코딩이대면안대기때문이다..
Connection con = null;
Statement stmt = null;
try {
con = DriverManager.getConnection(url,user,pw);
System.out.println(con.getClass().getName());
// 3번째 스텝, SQL문을 전송해주는 statement 객체를 생성..
// createStatement()라는 함수를 팩토리 메서드라고한다.
stmt = con.createStatement();
System.out.println(stmt.getClass().getName());
// 4. 4번쨰 Step은... SQL 전송 단계이다..
ResultSet resultSet = stmt.executeQuery(sql);
System.out.println(resultSet.getClass().getName());
while(resultSet.next()) {
int emp_id = resultSet.getInt("employee_id");
String name = resultSet.getString("first_name");
Date date = resultSet.getDate("hire_date");
float salary = resultSet.getFloat("salary");
System.out.println(emp_id + "\t" + name + "\t" + date + "\t" + salary);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 5. 사용했던 객체를 닫아주어야 한다..
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Prepared statement 사용법
근데 이거는 런타임에 sql을 sysout 으로 찍어봐도 ?밖에 보이지 않아서 ..
특별하게 따로 해줘야하는게 있따고 한다.
이런게 좀 단점.. 그러나 속도면에서는 이게 더 빠르다고한다..
package jdbc.app;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DepartmentsUpdateTest {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user = "hr";
String pw = "hr";
String sql = "update departments set department_name = ?, manager_id = ? where department_id = ?";
Connection con = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection(url,user,pw);
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "payrolls");
pstmt.setInt(2, 205);
pstmt.setInt(3, 270);
int rowcnt = pstmt.executeUpdate();
System.out.println(rowcnt+" 건이 update되었습니다.");
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
try {
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
여기서 Autocommit 쓰기 싫다..?
여담:
Oracle도 클라우드 서비스 한다.
그런데 애저나 AWS처럼 범용적인게아닌
자기거하고만 연동되는 서비스를한다.
인하우스라는게 있다
배민이 인하우스 2개 서버 돌렸다가 -> 작년인가 AWS로 전부 이전
JETBRAIN이라는 회사 있다.
체코 회산데 얘네가 인텔리제이 만들었다.
DataGrip이라는 것도 있따.
여기에는 전세계 모든 DB연동이가능하다.
WebStorm 이라는 것도 있다.
이건 자바스크립트.
'Dev > [Java]' 카테고리의 다른 글
[JDBC] 3. Dynamic Web Project 생성 + Maven연동 (0) | 2021.01.26 |
---|---|
[JDBC] 2. Servlet + JSP + JDBC ( Tomcat 설치) (0) | 2021.01.26 |
[JAVA] 7. Lambda 람다 (0) | 2021.01.20 |
[JAVA] 6. Collection (0) | 2021.01.20 |
[JAVA] 5. 인터페이스, static, final, abstract (0) | 2021.01.20 |