일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 단축키
- 전체텍스트
- Validations
- 25가지 효율적인 sql작성법
- 야구게임
- 전자정부
- jquery
- 상속
- Full text
- 전체
- 로또
- IBatis procedure
- 업캐스팅
- 가변인자
- Random
- 이클립스
- 자바 야구게임
- Login with OAuth Authentication
- full text indexing
- 자바
- 상속예제
- 스프링
- 추상클래스
- while
- angular2
- 페이징
- 형변환
- 다운캐스팅
- 다형성
- Today
- Total
nalaolla
java 코드 오라클 저장 프로시저 호출 본문
1, 연결 생성 Connection conn = DriverManager.getConnection(url, user, password);
2, 생성CallableStatement CallableStatement statement = conn.prepareCall(sql);
3, 매개 변수 설정
statement.setInt(1, id);
statement.registerOutParameter(2, Types.VARCHAR);
statement.registerOutParameter(3, Types.INTEGER);
statement.registerOutParameter(4, Types.VARCHAR);
4, 실행
statement.execute(); 또는 statement.executeUpdate();
5, 다시 가져오기
int age = statement.getInt(3);
그냥 오라클 저장 프로시저 어떤 결과 집합 커서 방식 은 복귀,
이때 우리가 필요한 호출ResultSet rs = (ResultSet) statement.getObject(1);
mysql관련된 프로시져이므로 오라클의 경우 select 프로시져의 경우 패키지와 커서를 사용해야 한다.
다음 저장 프로시저 테이블 구조 다음과 같다:
DROP TABLE person ; CREATE TABLE person ( id NUMBER(11) NOT NULL , username VARCHAR2(255 ) NULL , age NUMBER(11) NULL , password VARCHAR2(255) NULL , PRIMARY KEY (id) )
1, 쿼리 모든 기록 저장 프로시저 코드 다음과 같다:
create or replace procedure pro_person_findall( p_cursor out pkg_const.r_cursor ) is begin open p_cursor for select * from person; exception when others then DBMS_OUTPUT.PUT_LINE('정보 가져오는 중 오류 발생'); end pro_person_findall;
호출 부호 다음과 같다
public static void findAll() { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"; String user = "wuxx"; String password = "wuxx"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); String sql = "{call pro_person_findall2(?)}"; CallableStatement statement = conn.prepareCall(sql); statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); statement.execute(); ResultSet rs = (ResultSet) statement.getObject(1); ResultSetMetaData rmd = rs.getMetaData(); System.out.print(rmd.getColumnName(1) + " "); System.out.print(rmd.getColumnName(2) + " "); System.out.print(rmd.getColumnName(3) + " "); System.out.print(rmd.getColumnName(4) + "\n"); while (rs.next()) { System.out.print(rs.getInt("id") + " "); System.out.print(rs.getString("username") + " "); System.out.print(rs.getInt("age") + " "); System.out.print(rs.getString("password") + " \n"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
2, 한 가닥의 기록 검색 저장 프로시저 다음과 같다
CREATE OR REPLACE PROCEDURE PRO_PERSON_FINDBYID( v_id IN NUMBER, v_username OUT VARCHAR2, v_age OUT NUMBER, v_password OUT VARCHAR2, p_count out number ) AS BEGIN SELECT username, age, password INTO v_username, v_age, v_password from person where id = v_id; p_count := 1; exception when others then p_count := 0; END;
호출 부호 다음과 같다:
public static void find(Integer id) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"; String user = "wuxx"; String password = "wuxx"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); String sql = "{call PRO_PERSON_FINDBYID(?,?,?,?,?)}"; CallableStatement statement = conn.prepareCall(sql); BigDecimal rid = new BigDecimal(id); statement.setInt(1, id); statement.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); statement.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER); ; // statement.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR); statement.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER); statement.execute(); int flag = statement.getInt(5); if (flag != 0) System.out.println(statement.getString(2) + " " + statement.getInt(3) + " " + statement.getString(4)); else System.out.println("data not found!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
3, 추가 레코드 저장 프로시저 코드 다음과 같다:
create or replace procedure pro_person_insert( p_id number, p_username varchar2, p_age number, p_password varchar2, p_count out number ) is begin insert into person (id, username, age, password) values(p_id, p_username, p_age, p_password); p_count := SQL%ROWCOUNT; -- SQL%ROWCOUNT 위해 산림 커서 속성 commit; exception when others then p_count := 0; end pro_person_insert;
호출 부호 다음과 같다:
public static void add(Integer id, String username, int age, String u_password) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"; String user = "wuxx"; String password = "wuxx"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); String sql = "{call pro_person_insert(?,?,?,?,?)}"; CallableStatement statement = conn.prepareCall(sql); statement.setInt(1, id); statement.setString(2, username); statement.setInt(3, id); statement.setString(4, u_password); statement.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);// 레코드 성공 여부 태그 증가 성공 실패를 1 0 statement.execute(); System.out.println(statement.getInt(5)); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
4, 기록 저장 프로시저 코드 다음과 같다:
create or replace procedure pro_person_update( p_id number, p_age number, p_password varchar2, p_count out number ) is begin update person set age = p_age, password = p_password where id = p_id; p_count := SQL%ROWCOUNT; commit; exception when no_data_found then p_count := 0; when others then p_count := -1; end pro_person_update;
호출 부호 다음과 같다:
public static void update(Integer id, int age, String u_password) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"; String user = "wuxx"; String password = "wuxx"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); String sql = "{call pro_person_update(?,?,?,?)}"; CallableStatement statement = conn.prepareCall(sql); statement.setInt(1, id); statement.setInt(2, age); statement.setString(3, u_password); statement.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);// 레코드 성공 여부 태그 추가 statement.execute(); System.out.println(statement.getInt(4)); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
5, 파일 레코드 저장 프로시저 코드 다음과 같다:
create or replace procedure pro_person_delete( p_id number, p_count out number ) is begin delete from person where id = p_id; p_count := SQL%ROWCOUNT; commit; exception when no_data_found then p_count := 0; when others then p_count := -1; end pro_person_delete;
호출 부호 다음과 같다:
public static void delete(Integer id) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"; String user = "wuxx"; String password = "wuxx"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); String sql = "{call pro_person_delete(?,?)}"; CallableStatement statement = conn.prepareCall(sql); statement.setInt(1, id); statement.registerOutParameter(2, oracle.jdbc.OracleTypes.NUMBER);// 레코드 성공 여부 태그 추가 statement.execute(); System.out.println(statement.getInt(2)); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
'JAVA > 26. JDBC' 카테고리의 다른 글
프로시져 호출하여 리스트 출력 (0) | 2015.12.09 |
---|---|
JDBC_간단게시판 (2) | 2015.12.09 |