SQL + Java

hyunn·2021년 7월 21일
0

SQL

목록 보기
2/2
post-thumbnail

Oracle DB

admin account 자동생성

sys (sysdba 권한, 관리자)

system (제한 몇 개 있는 관리자)

sample(SH, PM, …)


Database dba

데이터를 가지고있는 객체

여러 파일에 데이터 저장

테이블 스페이스 – 여러 객체 존재

ORACLE Built-in Data Types

character 형식

‘문자’, ‘letter’, ‘123’

CHAR / VARCHAR2

size = 1 byte

char은 무조건 주어진 크기 할당 -> 가변길이 문자에는 비효율적임 but 길이 고정이기에 n번째 글자찾기엔 편함

varchar은 남은 공간은 반환 -> size=최대값 지정인 것

NCHAR / NVARCHAR2

size = 2or3 byte

National -> column에 영어+한글 한번에 저장할 때 / 더 많은 byte 소모 -> UTF8용


Numeric 형식

234, 3.14

NUMBER(p,s) -> p = 1~38 / s = -84~127 안써도됨

NUMBER(4) -> 최대 4자리 숫자

NUMBER(6,2) -> 소수점 2자리 포함하는 최대 6자리 숫자(소수 둘째자리에서 반올림)

NUMBER(6,-2) -> 소수점 -2자리에서 반올림하는 최대 6자리 숫자 = 소수점기준 정수부분 둘째자리

NUMBER = NUMBER(38,*)

NUMBER(*,5) = NUMBER(38,5)

숫자 따로 기입 안하면 MAX처리


Date 형식

DATE : 년 월 일 / 시점기준 BC 4712 ~ AD 9999

‘21/07/11’, ’21-07-11’

TIMESTAMP : 년 월 일 시 분 초 밀리초 ‘21/07/11 16.00.00.00000’ (초까지)


JDBC 코드 기본

  1. 드라이브 로드

Class.forName(“oracle.jdbc.driver.OracleDriver”)

new로 객체화하지않고 Class.forName을 이용해 객체화 -> 메모리에 로드

  1. 드라이브 한 매니저로 연결객체얻기

Connection con == DriverManager.getConnection(…);

  1. 실행도구생성

Statement st = con.createStatement();

  1. 쿼리실행 후 결과 얻기

ResultSet rs = st.executeQuery(sql);

ResultSet 객체가 만들어졌다는 것은 결과를 담을 칸이 준비가 됐다는 것임

BoF 에 커서 준비 before of file

  1. re.next();
  1. String title = rs.getString(“title”);

title 에 해당하는 컬럼 가져오기

끝나면 Eof 에 커서 완료 End of File


Oracle DB + Java 연결

1) 반드시 필수 라이브러리 .jar

​ ojdbc6(8).jar

2) 반드시 import java.sql.*;

자바코드 기술하는 스크립트 부분 = 구현 = 처리부분

3) java.lang 패키지

class 클래스 존재 정보 연결

4) Connection 연결정보, Statement 명령, PrepatedStatement 명령,

ResultSet 조회 관련 데이터 기억

5) 쿼리문 DML기준 String msg = "select~ insert~ delete~ update~";

6) 쿼리문 DML기준 String msg = “insert 쿼리문”;

7) 쿼리문 DML문장 실행


SQL과 Java 연결

Connection CN=null; //DB서버연결정보 서버ip주소 계정id,pwd

Statement ST=null; //ST=CN.createStatement()명령어생성 삭제,신규등록,조회하라

ResultSet RS=null; //select조회결과값 전체데이터를 기억합니다

String msg="isud=crud쿼리문기술";



public static void main(String[] args) {
  Connection CN=null; //DB서버연결정보 서버ip주소 계정id,pwd
  Statement ST=null;  //ST=CN.createStatement()명령어생성 삭제,신규등록,조회하라
  ResultSet RS=null;  //select조회결과값 전체데이터를 기억합니다
  String msg="isud=crud쿼리문기술";
  Scanner sc = new Scanner(System.in);
    int Gtotal = 0;
  try {
        Class.forName("oracle.jdbc.driver.OracleDriver"); //오라클드라이브로드
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE" ;
  CN = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","system","1234");
  System.out.println("오라클 드라이브및 서버연결성공 ");

      //1. 명령어 생성
      ST = CN.createStatement();
      //2. 키보드에서 데이터 입력
      System.out.print("\n코드 입력 (4자리)>>> ");
      int a = Integer.parseInt(sc.nextLine());
      System.out.print("\n이름입력>>> ");
      String b = sc.nextLine();
      System.out.print("\n제목입력>>> ");
      String c = sc.nextLine();

      //3. 쿼리문 완성
      msg = "insert into test(code, name, title, wdate, cnt) values(" + a + ", '" + b + "', '" + c + "', sysdate, 0)";
      System.out.println(msg);

      //4. 서버에서 실행 executeUpdate("insert~~~");
      int OK = ST.executeUpdate(msg);  //OK=n -> n개의 행에 반영 => 반영이 잘 되었으면 OK>0
      if(OK > 0) {
        System.out.println(a + " 코드 데이터 저장 성공");
      } else {
        System.out.println(a + " 코드 데이터 저장 실패");
      }

      System.out.println("프로그램 전체데이터 읽어오는중... 잠시 기다려주세요");
      Thread.sleep(3000);  //시간지연

      msg = "select * from test";  //문자열을 명령어로 인식해서 실행하도록 Statement
      RS = ST.executeQuery(msg);
      System.out.println("코드\t이름\t");

      while(RS.next() == true) {
        //필드접근 데이터 가져올때 getXXX()
        int ucode = RS.getInt("code");
        String uname = RS.getString("name");
        System.out.println(ucode + "\t" + uname);
      }

    } catch(Exception ex) { System.out.println("error이유: " + ex); }
    sc.close();
  }//main end

ResultSet RS = **executeQuery**(“select~~”); -> select쿼리 - 한 건 출력, 다수 출력, 전체 출력

int n = executeUpdate(“쿼리”); -> insert쿼리, update쿼리, delete쿼리


ResultSet RS = null;

RS = executeQuery(“select * form test”);

RS변수가 데이터를 전체 기억, 데이터를 들고 입구에서 대기중

사람마다 데이터 다르니까 while 사용


메서드로 CRUD 분리하면 가독성, 재사용성 증가

insert() {

msg = "insert into table ~~~";

}


규칙

클래스 및 인터페이스 이름 첫글자는 대문자

메소드 및 전역변수 이름 첫글자는 소문자

0개의 댓글

관련 채용 정보