[JDBC]
[Dynamic Web Project 생성]
[해당 프로젝트 우클릭]
자주해서 리프레시 해주기
[오라클 DB 서비스 확인]
[연습 테이블 확인]
> select from sungjuk;
> select from tb_student;
> select from tb_gwamok;
> select from tb_sugang;
[파일명 특징]
.class 는 파일 1개씩 배포
.jar는 알집처럼 묶어서 배포할 수 있는 자료형
Content directory 는 frontend 단에 몰아넣는 폴더를 설정할 수 있다. (.cdd .js .html .jsp)
.xml 구조 :<password> </password>
같은 커스텀 태그(사용자가 원하는 형태대로 만들 수 있다.)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
.xml 구조 :<password> </password>
같은 커스텀 태그(사용자가 원하는 형태대로 만들 수 있다.)
커스텀태그로 이루어져있다.
C:\app\itwill\product\18.0.0\dbhomeXE\jdbc\lib
/src/main/webapp/WEB-INF/lib/ojdbc8.jar
라이브러리 붙이기
sqlplus system/1234
입력 후 엔터
접속 성공창 확인
연습테이블 확인
> select * from sungjuk;
엔터
> select * from tb_student;
엔터
> select * from tb_gwamok;
엔터
> select * from tb_sugang;
엔터
- 여기 경로를 diver 변수에 작성해준 것.
드라이버 로딩 (그냥 공식)
Class.forName(driver);
- 길을 깔아주는 작업
오라클 DB 서버 연결 (그냥 공식)
DriverManager.getConnection(url, user, password);
- 정보를 넘겨주는 작업
RUN 하기
- Run 클릭하면 Run as 창이 뜨는데 java Application 을 클릭하고 OK 눌러준다.
- password 나 user 잘 못 작성해주면 "오라클 DB 연결 실패 "와 에러메세지가 뜨게 된다.
- 저 값들은 계속 추가해야하기 때문에 매번 생성하기엔 유지보수가 힘들다.
- 이 부분은 class안에 return값이 있는 함수를 생성해서 관리하면 편하다.
- 맨앞에 띄어쓰기를 하지 않으면 앞의 문자열과 이어지는 문장으로 혼동하기 쉽다.
(↓ 해결방법)
- 맨 앞에 공백으로 한 칸 띄어주고 단어를 대문자로 바꿔주면 헷갈리지 않을 수 있다.
5) SQL형식으로 변환 (단순 명령어)
prepareStatement()
: SQL 형식으로 변환시켜주는 명령어
- con변수는 최종 결과값을 출력해주는 변수인데, 그 최종 결과값을 sql 형식으로 변환시켜주는 코드를 짠다.
- prepareStatement()의 반환값이 CallableStatement이기떄문에
PreparedStatement pstmt =con.prepareStatement(sql.toString());
executeUpdate();
: SQL문 실행시켜주는 명령어
- 반환형이 int 형이다.
- INSERT, UPDATE, DELETE를 반환한다.
- 행의 개수가 반환된다.
- 1개가 나오면 성공, 0개는 실패 (반환된 것이 아님)
int cnt =pstmt.executeUpdate();
- RUN하고 서버 연결까지 확인하기
- update 코드 작성해준 후
- sql 형식 변환,
- SQL문 실행 코드 작성 후
- if조건문으로 값이 0으로 반환되면 행수정 실패 문구가 출력되도록, 0이 아니면 행 수정 성공 문구 출력되도록 한다.
package jdbc0921;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test04_delete {
public static void main(String[] args) {
// sunguk 테이블 행 추가 연습
try {
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="system";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
System.out.println("오라클 DB 서버 연결 성공!!");
StringBuilder sql=new StringBuilder();
sql.append("");
} catch (Exception e) {
System.out.println("실패" + e);
}//end
System.out.println("END");
}//main() end
}//class end
sql.append(" DELETE FROM sungjuk WHERE sno=21");
select * from sungjuk order by sno desc;
- 21번째 손흥민이 삭제되었다 ㅎㅎ
package jdbc0921;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test05_insert {
public static void main(String[] args) {
// sunguk 테이블 행 추가 연습
try {
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="system";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
System.out.println("오라클 DB 서버 연결 성공!!");
String name="박지성";
int kor=99, eng=98, mat=100;
String addr="Seoul";
StringBuilder sql=new StringBuilder();
sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, addr, wdate)");
sql.append("");
} catch (Exception e) {
System.out.println("실패" + e);
}//end
System.out.println("END");
}//main() end
}//class end
setString(int 물음표의 인덱스숫자, string변수)
- 반환형은 int
- parameterIndex는 물음표의 순서에 따라 값을 지정해줄 수 있다.
- 따라서 물음표의 순서와 칼럼의 순서를 일치시켜야 정확한 값이 나온다.
setInt(int 물음표의 인덱스숫자, Int변수)
- 물음표의 순서, 칼럼의 순서, 자료형을 일치시켜야한다.
- kor는 점수이기때문에 int형으로 함수로 바꿔줘야한다.
- java에서 작성한 박지성 칼럼이 추가되었다.
- sno 23 박지성 칼럼 업데이트하기.
- update문은 물음표를 변수안에 넣어주어야 한다.
- 물음표의 개수만큼 setString(), setInt() 넣어주기.
package jdbc0921;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test06_update {
public static void main(String[] args) {
// 문제) sno=23 행의 데이터를 아래의 내용으로 수정하시오.
int sno=23;
String uname="JSPark";
int kor=90, eng=85, mat=100;
int tot=(kor+eng+mat);
int aver=tot/3;
String addr="Suwon";
try {
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="system";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
System.out.println("오라클 DB 서버 연결 성공!!");
StringBuilder sql=new StringBuilder();
sql.append(" UPDATE sungjuk");
sql.append(" SET uname=? ");
sql.append(" , kor=? ");
sql.append(" , eng=? ");
sql.append(" , mat=? ");
sql.append(" , tot=? ");
sql.append(" , aver=? ");
sql.append(" , addr=? ");
sql.append(" , wdate=sysdate ");
sql.append(" WHERE sno=? ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
// → ? 의 개수, 순서, 자료형이 일치해야 한다.
pstmt.setString(1, uname);
pstmt.setInt(2, kor);
pstmt.setInt(3, eng);
pstmt.setInt(4, mat);
pstmt.setInt(5, tot);
pstmt.setInt(6, aver);
pstmt.setString(7, addr);
pstmt.setInt(8, sno);
int cnt=pstmt.executeUpdate();
if(cnt==0) {
System.out.println("행 추가 실패!!");
}else {
System.out.println("행 추가 성공~~");
}//if end
} catch (Exception e) {
System.out.println("실패" + e);
}//end
System.out.println("END");
}//main() end
}//class end