admin account 자동생성
sys (sysdba 권한, 관리자)
system (제한 몇 개 있는 관리자)
sample(SH, PM, …)
데이터를 가지고있는 객체
여러 파일에 데이터 저장
테이블 스페이스 – 여러 객체 존재
‘문자’, ‘letter’, ‘123’
CHAR / VARCHAR2
size = 1 byte
char은 무조건 주어진 크기 할당 -> 가변길이 문자에는 비효율적임 but 길이 고정이기에 n번째 글자찾기엔 편함
varchar은 남은 공간은 반환 -> size=최대값 지정인 것
NCHAR / NVARCHAR2
size = 2or3 byte
National -> column에 영어+한글 한번에 저장할 때 / 더 많은 byte 소모 -> UTF8용
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 : 년 월 일 / 시점기준 BC 4712 ~ AD 9999
‘21/07/11’, ’21-07-11’
TIMESTAMP : 년 월 일 시 분 초 밀리초 ‘21/07/11 16.00.00.00000’ (초까지)
Class.forName(“oracle.jdbc.driver.OracleDriver”)
new로 객체화하지않고 Class.forName을 이용해 객체화 -> 메모리에 로드
Connection con == DriverManager.getConnection(…);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSet 객체가 만들어졌다는 것은 결과를 담을 칸이 준비가 됐다는 것임
BoF 에 커서 준비 before of file
title 에 해당하는 컬럼 가져오기
끝나면 Eof 에 커서 완료 End of File
ojdbc6(8).jar
자바코드 기술하는 스크립트 부분 = 구현 = 처리부분
class 클래스 존재 정보 연결
ResultSet 조회 관련 데이터 기억
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
int n = executeUpdate(“쿼리”); -> insert쿼리, update쿼리, delete쿼리
ResultSet RS = null;
RS = executeQuery(“select * form test”);
RS변수가 데이터를 전체 기억, 데이터를 들고 입구에서 대기중
사람마다 데이터 다르니까 while 사용
메서드로 CRUD 분리하면 가독성, 재사용성 증가
insert() {
msg = "insert into table ~~~";
}
클래스 및 인터페이스 이름 첫글자는 대문자
메소드 및 전역변수 이름 첫글자는 소문자