테이블 = 스키마 = relationship
자바- db연동 - 브라우저에 노출
1. 오라클 DB서버 연결
try{
//1)오라클 DB 연결 관련정보
String url ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
//2)드라이버 로딩
Class.forName(driver);
//3)오라클 DB 서버 연결
DriverManager.getConnection(url, user, password);
System.out.println("오라클 DB 서버 연결 성공!");
}catch(Exception e){
System.out.println("오라클 DB 연결 실패!"+e);
}//try end
해당 클래스를 찾을 수 없다는 에러가 나왔다.
driver에 선언해준 클래스를 연결시켜주는 라이브러리를 추가시킨다.
이 라이브러리는 ojdbc6.jar
-외부 라이브러리 연결하기 (ojdbc6.jar)
project 우클릭-> build path -> configure build path..
추가한 다음엔 reflash / validate / project -> clean 하고 실행하기
연결 후 다시 실행하니, 연결이 성공되었다.
시작메뉴-> oracle 11g -> stop db
를 하고 실행하니 에러가 떴다.
2. DB에 행 추가 하기
1)
try{
String url ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Class.forName(driver);
Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
//4) SQL문 작성
// SQL문 종결문자 ; 를 쓰면 오류남
String sql="";
sql +=" INSERT INTO sungjuk(uname,kor,eng,mat) ";
sql +=" VALUES('박지성',90,50,60) "; //문자열 앞뒤로 공백을 주는 건, 혹시나 생길 오류때문
//System.out.println(sql);
//5) SQL형식 변환
PreparedStatement pstmt=con.prepareStatement(sql);
//6) SQL문 실행
int result=pstmt.executeUpdate(); //리턴형
//insert된 행의 갯수 1행이 추가됨
System.out.println("실행결과:"+result);
}catch(Exception e){
System.out.println("실패!"+e);
}//try end
출력결과
오라클 DB 서버 연결 성공!
실행결과:1
자바를 계속 실행하면 행은 계속 추가된다. 난 두번 런해서 두번 추가되었다 ㅎ. 원래 10행이었는데..
2)
try{
String url ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Class.forName(driver);
Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
//SQL문 작성시 문자열 연산 속도를 고려하여 StringBuilder클래스 추천 !
StringBuilder sql=new StringBuilder(); //class기때문에 new연산자
//sql의 함수를 불러낸다
sql.append(" INSERT INTO sungjuk(uname,kor,eng,mat) ");
sql.append(" VALUES('김연아',95,90,100) ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
int result=pstmt.executeUpdate();
if(result==0){
System.out.println("행추가 실패!");
}else{
System.out.println("행추가 성공~");
}//if end
}catch(Exception e){
System.out.println("실패!"+e);
}//try end
출력결과
오라클 DB 서버 연결 성공!
행추가 성공~
3. DB에 행 수정하기
try{
String url ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Class.forName(driver);
Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
StringBuilder sql=new StringBuilder();
sql.append(" UPDATE sungjuk ");
sql.append(" SET aver=(kor+eng+mat)/3 ");
sql.append(" WHERE uname in ('박지성','김연아') ");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
int result=pstmt.executeUpdate();
if(result==0){
System.out.println("행 수정 실패!");
}else{
System.out.println("행 수정 성공~");
}//if end
}catch(Exception e){
System.out.println("실패!"+e);
}//try end
Class Connection과 Class PreparedStatement는 다 썼으면 자원반납해야함
마지막에 사용한 자원부터 close한다.
4. DB에 행 삭제하기
Connection con=null;
PreparedStatement pstmt=null;
try{
String url ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Class.forName(driver);
con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
StringBuilder sql=new StringBuilder();
sql.append(" DELETE FROM sungjuk ");
sql.append(" WHERE uname='박지성' ");
pstmt=con.prepareStatement(sql.toString());
int result=pstmt.executeUpdate();
if(result==0){
System.out.println("행 수정 실패!");
}else{
System.out.println("행 수정 성공~");
}//if end
}catch(Exception e){
System.out.println("실패!"+e);
}finally{
//자원반납(순서주의~!)
try{
if(pstmt!=null){pstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
출력결과
오라클 DB 서버 연결 성공!
행 수정 성공~
5. DB에 행 읽기
// 행 읽기 연습
String url ="jdbc:oracle:thin:@localhost:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
StringBuilder sql=new StringBuilder();
sql.append(" SELECT uname,kor,eng,mat,aver ");
sql.append(" FROM sungjuk ");
sql.append(" WHERE uname='라일락' ");
//.XML myBatis Framework 민원서류
pstmt=con.prepareStatement(sql.toString());
rs=pstmt.executeQuery(); //select문 ,리턴형, '라일락'값이 담긴다.
//cursor : 가리키는 값. 이동할 수 있다.
//last, first 얼마든지 이동가능하다.
if(rs.next()){ //cursor가 있나?
System.out.println("자료있음!");
}else{
System.out.println("자료없음!");
}//if end
}catch(Exception e){
System.out.println("실패!"+e);
}finally{
//자원반납(순서주의~!)
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(pstmt!=null){pstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
1) 칼럼읽기
- if문안에 넣는다
- rs에 넣은 값의 커서의 위치를 물어보는 부분에 print하기
if(rs.next()){ //cursor가 있나?
System.out.println("자료있음!");
//1)칼럼순서 - 칼럼의 자료형에 맞춘다
// (select 칼럼1, 칼럼2,~)
System.out.println(rs.getString(1)+" ");
System.out.println(rs.getInt(2)+" ");
System.out.println(rs.getInt(3)+" ");
System.out.println(rs.getInt(4)+" ");
System.out.println(rs.getInt(5)+" ");
System.out.println();
//2)칼럼명 (select uname,kor,~)
System.out.println(rs.getString("uname")+" ");
System.out.println(rs.getInt("kor")+" ");
System.out.println(rs.getInt("eng")+" ");
System.out.println(rs.getInt("mat")+" ");
System.out.println(rs.getInt("aver")+" ");
System.out.println();
}else{
System.out.println("자료없음!");
}//if end
출력결과 - 같다
라일락
30
80
40
50
2) 전체목록 읽기
- sql문에 ORDER BY를 써서 전체목록을 출력하였다.
// 행 읽기 연습 (전체목록)
String url ="jdbc:oracle:thin:@localhost:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
StringBuilder sql=new StringBuilder();
sql.append(" SELECT uname,kor,eng,mat,aver ");
sql.append(" FROM sungjuk ");
sql.append(" ORDER BY uname ");
//.XML myBatis Framework 민원서류
pstmt=con.prepareStatement(sql.toString());
rs=pstmt.executeQuery(); //select문 ,리턴형, sql값이 담긴다.
//cursor : 가리키는 값. 이동할 수 있다.
//last, first 얼마든지 이동가능하다.
if(rs.next()){ //cursor가 있나?
System.out.println("자료있음!");
do{
System.out.print(rs.getString("uname")+" ");
System.out.print(rs.getInt("kor")+" ");
System.out.print(rs.getInt("eng")+" ");
System.out.print(rs.getInt("mat")+" ");
System.out.print(rs.getInt("aver")+" ");
System.out.println();
}while(rs.next());
}else{
System.out.println("자료없음!");
}//if end
}catch(Exception e){
System.out.println("실패!"+e);
}finally{
//자원반납(순서주의~!)
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(pstmt!=null){pstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
->출력결과
6. DB에 행 추가 (변수) 하기
- SQL문에 INSERT~ VALUES(?,?,?,~) 를 써서 ?를 특정값으로 대체한 후 값을 대입
- 쿼리문으로 변환한 후 , 각 칼럼의 자료형에 맞게 셋팅한다.
- 출력결과는 위의 5번 전체목록출력에서 RUN하여 얻어내었다.
try{
Class.forName(driver);
con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다.
System.out.println("오라클 DB 서버 연결 성공!");
StringBuilder sql=new StringBuilder();
sql.append(" INSERT INTO sungjuk(uname,kor,eng,mat,aver) ");
sql.append(" VALUES(?,?,?,?,?) ");
// ?는 명령어, 직접쓰지않고 특정값으로 대체함
// ? 갯수와 값 갯수가 같아야한다.
//쿼리문으로 변환한 후 값을 넣는다
pstmt=con.prepareStatement(sql.toString());
//?순서와 ?에 들어갈 자료형 주의한다.
pstmt.setString(1, "이강인"); //1 : 첫번째 ?, uname칼럼
pstmt.setInt(2, 85); //2 : 두번째 ?, kor칼럼
pstmt.setInt(3, 75); //3 : 세번째 ?, eng칼럼
pstmt.setInt(4, 60); //4 : 네번째 ?, mat칼럼
pstmt.setInt(5, (85+75+60)/3);//5 : 다섯번째 ?, aver칼럼
int result=pstmt.executeUpdate();
if(result==0){
System.out.println("행 추가 실패!");
}else{
System.out.println("행 추가 성공~");
}//if end
->출력결과
'공부 > 응용 SW' 카테고리의 다른 글
6월25일 - 오라클 SQL1 (0) | 2019.06.25 |
---|---|
6월24일 - SW활용 (0) | 2019.06.24 |
6월20일 - SW활용 Oracle (0) | 2019.06.20 |
6월19일 - SW활용 : DB (0) | 2019.06.19 |
6월18일 - SW활용 네트워크 (0) | 2019.06.18 |