Java Project : 11_io
Package : homework
Lombok
생성자, setter/getter, toString(), hashCode(), equlas()
설치 방법
- 이클립스 종료
- Projectlombok.org
- lib에 다운로드 (위치에 한글x, 공백x → D:\Java\lib)
- 다운받은 위치에서 우클릭해 터미널창 열기
- java -jar .\lombok.jar ( -붙은거 → 옵션 / . → this / .. → 부모) 설치
6. 확인 eclipse.ini
Edit plus로 열어서 맨 밑에 줄에 lombok.jar 있는지 확인하기
이클립스 실행
- Java Project 안에서 폴더(lib)를 만든다
2. lib에 lombok.jar를 복사한다.
3. lombok.jar 우클릭 → Build Path → Add to Build Path
기본생성자 만들기
- @NoArgsConstructor
생성자 만들기
1. @RequiredArgsConstructor
2. @NonNull - 바로 아래꺼만 된다.
Getter / Setter 만들기
1. @Getter
2. @Setter
위에 있는 것 - 휴지조각
사라진 것을 확인할 수 있다.
insert delete update에서만 commit / rollback 적용
commit된 부분까지 트랜잭션
delete
update
~~~
~~~
commit하게되면 또 다른 트랜잭션이 만들어지는 것이다.
rollback하게되면 commit한 이 전까지 날라가는 것이다.
안에 있는 데이터까지 다 살아돌아오고, 휴지통 안에 아무것도 없어짐.
휴지통에 거치지않고 바로 삭제된다.
[ 시퀀스 객체 ]
1~9까지 CACHE_SIZE 0으로 바뀜.
Java Project : dbtest
Package : dbtest.dao
Class : InsertMain.java
UpdateMain.java
SelectMain.java
→ ojdbc8.jar
www.oralce.com가서 받아도 되지만
ojdbc8.jar 다운로드해서 받는게 편하다.
developer가서 받아도 됨.
폴더만들고
붙여넣기
- driver loading(1번만 하면 됨)
- 한 번만 호출되는 것 생성자 !!
package dbtest.dao;
public class InsertMain {
public InsertMain() {
}
public static void main(String[] args) {
new InsertMain();
}
}
ojdbc11.jar → 반디집으로 열기
파일명만 가지고는 클래스인지 인터페이스인지 알 수 없다.
생성할 때 어떻게 생성할지 알 수가 없다.
오라클 드라이버 파일
OracleDriver.class 파일이 필요한다.
클래스라면 new하면 되고 아니면 다른방법으로 but, 알 수가 없다.
클래스, 인터페이스인지는 모르지만 자바에서 사용하긴 한다.
자바에서는 어떤건지 모르겠다 → Class 얘는 자체가 이름이 Class(class랑은 다름 class는 예약어)
→ Class class 이렇게 생성하는 것
oracle.jdbc.driver.OracleDriver.class
무슨 타입일지 모를 때 Class 타입으로 생성해준다.
Class.forName("oracle.jdbc.driver.OracleDriver"); //생성
public InsertMain() {
Class.forName("oracle.jdbc.driver.OracleDriver"); //생성
}
ClassNotFoundException 예외처리 - try/catch
public InsertMain() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//생성
System.out.println("driver loading");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
2. Connection
java.sql에서 인터페이스로 제공함.
1. public class InsertMain implements Connection{
추상메소드 50개 넘는다. → 전부 오버라이딩 힘들다.
2. 대신 implements 해주는 메소드 없다.
3. 메소드로 생성해주는 애들
DriverManager에서
getConnection(String url, String user, String password)를 쓴다.
static이라 바로 이용 가능
URL
웹 http://
보안 https://
파일 ftp://
원격접속 rmi://
오라클 jdbc:oracle:thin(드라이버명):@localhost(나한테):1521:xe(데이터베이스명)
public void getConnection() {
Connection com = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "C##JAVA", "1234");
}
드라이버랑 url 외워두는 것이 좋다.
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class InsertMain {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "C##JAVA";
private String password = "1234";
private Connection con;
public InsertMain() {
try {
Class.forName(driver);//생성
System.out.println("driver loading");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void getConnection() {
try {
con = DriverManager.getConnection(url, username, password);
System.out.println("connection");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new InsertMain();
}
}
아직 connection 안 잡은 상태
insert할 때 호출하겠다.
public void insertArticle() {
this.getConnection(); //호출
}
public static void main(String[] args) {
new InsertMain().insertArticle();
}
new InsertMain().insertArticle(); → this.getConnection(); //호출
-> public void getConnection() { → connection된다.
driver loading
이름 입력 : aa
나이 입력 : 24
키 입력 : 160
connection
3. PreparedStatement(부모 - Statement)
private PreparedStatement pstmt;
pstmt는 new 안된다.
try {
pstmt = con.prepareStatement("");//생성
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sql 문장을 해결해주는 가이드이다.
pstmt = con.prepareStatement("insert into dbtest values(?,?,?, sysdate)");//생성
오라클은 1번부터 시작
1번 물음표, 2번 물음표, 3번 물음표
//?에 데이터 매핑
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setDouble(1, height);
이렇게 해야 보안상 안전하다.
int su = pstmt.executeUpdate();//실행 - 개수가 return된다.
try {
if(pstmt != null)
pstmt.close();
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
오류 상관없이 close 해주는 것
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class InsertMain {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "C##JAVA";
private String password = "1234";
private Connection con;
private PreparedStatement pstmt;
public InsertMain() {
try {
Class.forName(driver);//생성
System.out.println("driver loading");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void getConnection() {
try {
con = DriverManager.getConnection(url, username, password);
System.out.println("connection");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void insertArticle() {
//데이터
Scanner scan = new Scanner(System.in);
System.out.print("이름 입력 : ");
String name = scan.next();
System.out.print("나이 입력 : ");
int age = scan.nextInt();
System.out.print("키 입력 : ");
double height = scan.nextDouble();
//SQL
this.getConnection(); //호출
try {
pstmt = con.prepareStatement("insert into dbtest values(?,?,?, sysdate)");//생성
//?에 데이터 매핑
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setDouble(3, height);
int su = pstmt.executeUpdate();//실행 - 개수가 return된다.
System.out.println(su + "개의 행이 삽입되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
}finally {
//close 할 때는 거꾸로 닫아준다.
try {
if(pstmt != null)
pstmt.close();
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new InsertMain().insertArticle();
}
}
driver loading
이름 입력 : 홍길동
나이 입력 : 25
키 입력 : 185.3
connection
1개의 행이 삽입되었습니다.
driver loading
이름 입력 : 코난
나이 입력 : 13
키 입력 : 15.3
connection
1개의 행이 삽입되었습니다.
package dbtest.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class UpdateMain {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String username = "C##JAVA";
private String password = "1234";
private Connection con;
private PreparedStatement pstmt;
public UpdateMain() {
try {
Class.forName(driver);
System.out.println("driver loading");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void getConnection() {
try {
con = DriverManager.getConnection(url, username, password);
System.out.println("connection");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateArticle() {
Scanner scan = new Scanner(System.in);
System.out.print("수정할 이름 입력 : ");
String name = scan.next();
//SQL
getConnection(); //호출
try {
pstmt = con.prepareStatement("update dbtest set age=age+1 where name like ?");
//?에 데이터 매핑 ★★★★★
pstmt.setString(1, "%" + name + "%");
int su = pstmt.executeUpdate();
System.out.println(su + "개의 행이 수정되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if(pstmt != null)
pstmt.close();
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new UpdateMain().updateArticle();
}
}
driver loading
수정할 이름 입력 : 홍
connection
1개의 행이 수정되었습니다.
update dbtest set age=age+1 where name like '%코%';
update, delete, insert를 developer에서 하게되면 lock이 걸려버린다.
해결하려면 commit을 해야 lock걸린게 풀린다.
자바에서는 자동으로 commit 해주기 때문에 상관없다.
'JAVA' 카테고리의 다른 글
DAY 14 - 입출력처리 / 객체 직렬화 / 프로세스 / Thread (1) | 2024.08.12 |
---|---|
DAY 15 - Thread / Synchronized (2024.07.23) (0) | 2024.08.09 |
DAY 17 - MEMBER (2024.07.25) (0) | 2024.08.08 |
DAY 19 - Lambda (2024.07.29) (0) | 2024.08.07 |
DAY 20 - Network (2024.07.30) (0) | 2024.08.07 |