일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HTTP Status 404
- SQL
- HTTP Status 500
- github
- alias
- Java
- Oracle SQL
- tomcat
- 부트스트랩
- 이클립스
- CRUD
- 성적프로그램
- oracle
- 답변형 게시판
- JSP
- 제약조건
- rownum
- group by
- Bootstrap
- HTML
- distinct
- git
- Oracle DB
- sql developer
- 모조칼럼
- ||
- JavaScript
- 과정평가형
- 한글 인코딩
- jQuery
Archives
초급의 끄적거림
[Oracle] JDBC 오라클 DB와 자바 연동 / 라이브러리 연결 본문
자바를 이용해서 많이 하는 것 : 자바를 이용해서 데이터베이스 연동 (필수)
[라이브러리 연결 방법]
- 필요한 라이브러리(.jar 파일) 가 있는 위치를 확인해두고 시작할 것.
① Package Explorer - 라이브러리를 연결하고자하는 패키지 우클릭 - Build Path - Configure Build Path
② 외부에 있는 jar를 가져오기 때문에 'Add External JARs...' 선택 → 미리 찾아둔 경로의 .jar 파일을 등록
성적프로시저에 만든 것들을 JDBC로 만드는 것. 성적프로시저가 있는 링크 |
[Test01_Insert]
- Test01_Insert를 복사해서 Test02~03 만들기
package oop0805;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
public class Test01_Insert {
public static void main(String[] args) {
// sungjuk 테이블 행추가 연습
//오라클DB서버 접근 기본 정보
String url ="jdbc:oracle:thin:@localhost:1521:xe"; //포트번호 1521, 본인지칭 아이피 : 27.0.0.1 이나 localhost
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null; //DB연결
PreparedStatement pstmt=null; //SQL변환
ResultSet rs=null; //select 문 조회
try{
//1) 드라이버 로딩
Class.forName(driver);
//2) DB연결
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
//3) SQL문 작성
StringBuilder sql=new StringBuilder();
String uname="박지성";
int kor=50, eng=60, mat=65;
int tot=kor+eng+mat;
int aver=tot/3;
String addr="Suwon";
sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, tot, aver, addr, wdate) ");
sql.append(" VALUES(sungjuk_seq.nextval, ?, ?, ?, ?, ?, ?, ?, sysdate)");
//4) SQL문 변환
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);
//5) SQL문 실행
int cnt=pstmt.executeUpdate();
if(cnt==0){ //cnt가 0이 됐다는 것은 행추가를 하지 못했다는 의미
System.out.println("행추가 실패TT");
}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
}//main() end
}//class end
[Test02_SelectAll]
package oop0805;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
public class Test02_SelectAll {
public static void main(String[] args) {
// sungjuk 테이블 행보기 연습
//오라클DB서버 접근 기본 정보
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, tot, aver, addr, wdate");
sql.append(" FROM sungjuk ");
sql.append(" ORDER BY sno DESC ");
pstmt=con.preparStatement(sql.toString());
rs=pstmt.executeQuery(); //SQL문을 실행해서 rs에 담기(실제 데이터 반환)
if(rs.next()){ //rs에 커서가 존재하는가
do{
System.out.print(rs.getInt("sno")+" ");
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("tot")+" ");
System.out.print(rs.getInt("aver")+" ");
System.out.print(rs.getString("addr")+" ");
System.out.print(rs.getString("wdate")+" ");
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
}//main() end
}//class end
[Test03_ProcedureInsert]
- sql developer 에서 미리 작성한 sungjukInsert.sql 프로시저를 호출할 것
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
public class Test03_ProcedureInsert1 {
public static void main(String[] args) {
// sungjuk_ProcedureInsert
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null; //DB연결
//프로시저 호출관련 인터페이스
CallableStatement cstmt=null;
ResultSet rs=null; //select 문 조회
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
//프로시저 호출형식
//con.prepareCall("{call 프로시저이름 (?, ?, ?)}")
//→ sql 문에 가면 매개변수가 uname, kor, eng, mat, addr 총 다섯개가 있음을 알 수 있음 그 결과 물음표도 5개
sql.append(" {call sungjukInsert(?, ?, ?, ?, ?)} " );
cstmt=con.prepareCall(sql.toString());
cstmt..setString(1, "알라딘");
cstmt.setInt(2, 90);
cstmt.setInt(3, 75);
cstmt.setInt(4, 80);
cstmt.setString(5, "Seoul");
int cnt=cstmt.executeUpdate(); // executeUpdate : 작용한 열의 개수를 나타내는 정수 executeQuery()는 실제데이터를 반환하는 반면, executeUpdate()는 엡뎃한 건수를 반환
System.out.println(cnt);
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
[Test04_ProcedureUpdate]
- 존재하고 있는 내용을 바꿔줘야하기 때문에 sno 의 번호가 존재하는 것을 SelectAll 에서 전체목록 확인 후 찾아오기
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
public class Test04_ProcedureUpdate {
public static void main(String[] args) {
// sungjuk_ProcedureUpdate
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null; //DB연결
//프로시저 호출관련 인터페이스
CallableStatement cstmt=null;
ResultSet rs=null; //select 문 조회
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.append(" {(call sungjukUpdate(?, ?, ?, ?,?)} ");
cstmt=con.prepareCall(sql.toString());
cstmt.setString(1, "자스민");
cstmt.setInt(2, 65);
cstmt.setInt(3, 95);
cstmt.setInt(4, 70);
cstmt.setString(5, "Jeju");
cstmt.setInt(6, 22);
int cnt=cstmt.executeUpdate();
System.out.println(cnt);
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
[Test05_ProcedureDelete]
- sno 22에 해당하는 '자스민' 지우기
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
public class Test05_ProcedureDelete {
public static void main(String[] args) {
// sungjuk_ProcedureDelete
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null; //DB연결
//프로시저 호출관련 인터페이스
CallableStatement cstmt=null;
ResultSet rs=null; //select 문 조회
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.apppend(" {call sungjukDelete(?)} ");
cstmt=con.prepareCall(sql.toString());
cstmt.setInt(1, 22);
int cnt=cstmt.executeUpdate();
System.out.println(cnt);
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
[Test06_ProcedureList]
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
import oracle.jdbc.OracleTypes;
public class Test06_ProcedureList {
public static void main(String[] args) {
// 프로시저를 이용한 sungjuk 테이블 목록연습
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null;
CallableStatement cstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.append(" {call sungjukList(?)} ");
//첫번째 ? 인덱스
//OracleTypes.CURSOR 조회하고자하는 DB
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
[Test07_ProcedurePaging]
- 전체 목록을 확인하고 무엇을 찾았는지 비교확인할 것
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
import oracle.jdbc.OracleTypes;
public class Test07_ProcedurePaging {
public static void main(String[] args) {
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null;
CallableStatement cstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.append("{call sungjukPaging(?, ?, ?)}");
cstmt=con.prepareCall(sql.toString());
//첫번째 ? 인덱스
//OracleTypes.CURSOR 조회하고자 하는 DB
cstmt.registerOutParameter(1, OracleTypes.CURSOR); //프로시저에 v_cursor가 1번에 있기 때문에 1
cstmt.setInt(2, 7); //rnum=7 에서
cstmt.setInt(3, 11); //rnum=11까지
cstmt.execute(); //실행
//1이 의미하는 것 : (1, OracleTypes.CURSOR);
rs=(ResultSet) cstmt.getObject(1); //resultset 형태로 만들어서 rs에 넣어라
if(rs.next()){
System.out.println("!자료있음!");
do{
System.out.print(rs.getInt("sno")+" ");
System.out.print(rs.getString("uname")+" ");
System.out.print(rs.getString("addr")+" ");
System.out.println();
}while(rs.next());
}else{
System.out.println("자료없음TT");
}//if end
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
[Test08_ProcedureSearch]
package oop0805;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.tree.ExpandVetoException;
import oracle.jdbc.OracleTypes;
public class Test08_ProcedureSearch {
public static void main(String[] args) {
// 프로시저를 이용한 sungjuk 테이블 검색연습
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="java0514";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Connection con=null;
CallableStatement cstmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
System.out.println("~오라클DB서버 연결 성공~");
StringBuilder sql=new StringBuilder();
sql.apped("{call sungjukSearch(?, ?, ?)}");
cstmt=con.prepareCall(sql.toString());
cstmt.registerOutParameter(1, OracleTypes.CURSOR); //프로시저에 v_cursor가 1번에 있기 때문에 1
cstmt.setInt(2, 1);
cstmt.setString(3, "화");
cstmt.execute(); //실행
rs=(ResultSet) cstmt.getObject(1);
if(rs.next()){
System.out.println("!자료있음!");
do{
System.out.print(rs.getInt("sno")+" ");
System.out.print(rs.getString("uname")+" ");
System.out.print(rs.getString("addr")+" ");
System.out.println();
}while(rs.next());
}else{
System.out.println("자료없음TT");
} //if end
}catch(Exception e){
System.out.println("!실패!" + e);
}finally{ //자원반납
try{
if(rs!=null){rs.close();}
}catch(Exception e){}
try{
if(cstmt!=null){cstmt.close();}
}catch(Exception e){}
try{
if(con!=null){con.close();}
}catch(Exception e){}
}//try end
}//main() end
}//class end
'DB' 카테고리의 다른 글
[데이터 유형] CHAR와 VARCHAR 비교 (0) | 2020.03.21 |
---|---|
[SQL] JOIN의 종류 (0) | 2020.01.20 |
[mySQL] Error code [1046] 원인과 해결 (0) | 2019.12.03 |
[관계형 데이터베이스] 기본, 모델링 개념 (0) | 2019.08.07 |
Comments