국비수업/수업정리

오라클 SQL / 5

밀김 2023. 4. 25. 19:33
728x90

 

 

 

 

 

 

 

 

 

 

 

//회원정보 조회 테이블

package homework;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

public class Program {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
				
		String url = "jdbc:oracle:thin:@oracle.newlecture.com:1521/xepdb1";
		//오라클 DB주소 너무 기니까 URL 변수에다가 담아줌
		
		System.out.println("[게시글 검색 프로그램]");
		System.out.print("회원 검색어 입력 : ");
		Scanner sc = new Scanner(System.in);
		String userInfo = sc.next();
	
		String sql = "SELECT * FROM MEMBER WHERE NAME LIKE '"+ userInfo + "%'";
		//위에서 입력받은 NAME이 유저 정보인 것들을 찾기
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//객체생성 없이 드라이버 클래스에 접근하기 
		Connection con = DriverManager.getConnection(url,"NEWLEC","b104");
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql); 
		//★★ 국 룰 존 ★★ 
		
		System.out.println("[NAME]\t\t\t[ID]\t\t\t[PWD]"); // \t:탭(띄어쓰기 일정하게 하기 위한)
			while(rs.next()) { //rs.next 반환값은 boolean이다
				System.out.print(rs.getString("NAME")+"\t\t\t"+rs.getString("ID")+"\t\t\t"+rs.getString("PWD")); //GETSTRING으로 문자열 반환하기
				System.out.println();
	//			System.out.println(rs.getRow());//줄수를 나타내는 메서드
			}
			
			
			
			//-----------------------------컬럼명 출력하는 방법
//        // 결과셋의 메타데이터를 가져옵니다
//        ResultSetMetaData rsmd = rs.getMetaData();
//        int columnCount = rsmd.getColumnCount();
//        for (int i = 1; i <= columnCount; i++) {
//            String columnName = rsmd.getColumnName(i);
//            System.out.println(columnName);
//        }
        
        
		rs.close();
		st.close();
		con.close();
		//닫을때는 역순으로 !!!!!
		
		
		
	}
}

 

 

 


 

 

- 정규식을 쓰는 이유는 : 유효성검사를 하기 위함이다

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions

 

정규 표현식 - JavaScript | MDN

정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다. String의 match(), matchA

developer.mozilla.org

 

 

 

 

- \d : 0부터 9            \D : 0부터 9까지 제외한 모두 

 

- ?: 정규식에서 그룹화를 해준다 

 

- ^ : 시작 문자열(구문 중간에는 못씀)

 

- \w : 숫자는 못들어옴(영어대소문자숫자언더바 > 소문자w / 그외(특문,한글) > 대문자W)

 

- + : ~자릿수 이상

 

- . 으로 @를 찾을수 있다

 

 

 

 

 

 

- REGEXP_LIKE : 정규식을 이해할수 있는 함수

 

조회하고싶은거 넣고,뒤에는 정규식으로...

 

 

 

 


 

 

 

이클립스에서 생성자를 오버라이드하려면 "Alt + Shift + S"를 누르고 "O"를 선택합니다. 이러한 단축키는 메뉴에서도 찾을 수 있습니다. "Source" 메뉴를 선택하고 "Override/Implement Methods..."를 선택한 다음 "Constructor"를 선택하면 됩니다.

 

 

 

 

- 클래스만들때 private 초기화+기본생성자+오버라이딩생성자+getter,setter 국룰!!!!!!!!!걍 습관처럼 만들기

 

 

 

 

package homework;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Program {

   public static void main(String[] args) throws ClassNotFoundException, SQLException {
      /*
       * 오라클.jdbc.driver 라는 패키지 안에 오라클 드라이버의 클래스가 있음 , 이 클래스를 객체화 하는게 로드! 
       * 메모리상에 드라이버가올라감 보통 new 연산자를 통해서 객체를 생성하지만  특별하게 Class.forName으로 객체 생성 .
       * 드라이버 매니저를 (”oracle.jdbc.driver.OracleDriver”) 통해서 연결객체를 얻고  실행도구를 생성합니다
       * 쿼리를 실행한 다음에 결과를 다시 얻어서 패치하는 도구 생성 (resultset)
       * 이렇게 객체 4개가 만들어진다. 1. 오라클 드라이버 2.커넥션 객체 3.statement(실행도구) 4.결과도구를 패치해오는 도구 resultset
       */
	  String name = "";
      {
      Scanner sc = new Scanner(System.in);
      System.out.println("[게시글 검색 프로그램]");
      System.out.print("회원 검색어 입력 : ");
      name = sc.nextLine();
      }

      //결과 집합 담을 배열 만드는게 좋다! ->컬렉션 이용.그릇 마련이 좋은데 클래스로 왜냐면 자료형이 다양하니까 

      Member[] list = new Member[1000]; // 가변크기가 되도록 증가시키는 코드를 짜든지, 아니면 넉넉하게 준비 
      int index = 0;

      {
         //★★ 국 룰 존 ★★ 
         String url = "jdbc:oracle:thin:@oracle.newlecture.com:1521/xepdb1";
         String sql = "SELECT * FROM MEMBER WHERE NAME LIKE'"+name+"%'";//쿼리 만들어줌
         //입력받은 NAME이 유저 정보인 것들을 찾기
         Class.forName("oracle.jdbc.driver.OracleDriver");
         Connection con = DriverManager.getConnection(url,"NEWLEC","b104");
         Statement st = con.createStatement();
         ResultSet rs = st.executeQuery(sql);

         while(rs.next()) {

            Member member = new Member(
                  rs.getInt("ID"),
                  rs.getString("NAME"),
                  rs.getString("EMAIL"));

            list[index++]= member;
         }

         rs.close();
         st.close();
         con.close();
      }


      {
         for(int i =0;i<index;i++) {
            System.out.println(list[i].getId());
            System.out.println(list[i].getName());
            System.out.println(list[i].getEmail());
         }
      }


   }//메인

}//클래스



//이름은 NVARCHAR2, ID는 VARCHAR2 PWD VARCHAR2
//-----------------------------컬럼명 출력하는 방법
//// 결과셋의 메타데이터를 가져옵니다
//ResultSetMetaData rsmd = rs.getMetaData();
//int columnCount = rsmd.getColumnCount();
//for (int i = 1; i <= columnCount; i++) {
//  String columnName = rsmd.getColumnName(i);
//  System.out.println(columnName);
//}

 

 

 

 

 

- PreparedStatment : 확장 (sql을 미리 준비해놓는다)

 

 

 


 

 

 

< ROWNUM : 일련번호 보여주는 >

 

 

- 필터링중에 제일 많이 쓰는것 : 페이징

 

- 로우넘은 1부터 비교하지 않으면 값이 안나온다. 이런문제는 테이블을 생성할때 ROWNUM을 같이 넣어주면 됨

 

 

 

 

소괄호 안은 먼저 실행해야할 '서브쿼리'가 남긴다

- 쿼리 안에 쿼리가 담길수 있음

 

 

 

 

 

소괄호 안에 쓸때는 별칭을 꼭 붙여줘야 한다. 별칭을 안붙이면 바깥쿼리도 실행이 되기 때문에 구분을 짓기 위해서..

- MEMBER 옆에 .은 꼭 붙여줘야 한다 (이유는????? ..EXAM.KOR 처럼 .을 안붙이면 어디의 어디 속성인지 모르니까?)

 

테이블 오른쪽에 점을 붙여야하는 이유

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90