본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

(미안)9/7 데이터베이스(DB)

by 인생즐겜러 2022. 9. 7.
728x90
반응형

AWS 클라우드환경 네이티브 수업 78일차

 

 

 

진행

1. 데이터 베이스(Datebase)와 자바(Java)의 연결

 

 

조퇴에에에엥에ㅔ에에엥엑~~~!!!

 

 

 

요약

1. 

 

 

 

 

 


 

 

 

 

 

데이터 베이스(Datebase)와 자바(Java)의 연결

 

 

이전 시간까지 DB에서 사용하던 scott DB내에 있는 emp 테이블을

자바를 이용해서 불러와보려고 한다.

 

 

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// DB 접속 클래스
public class DBConnection {

	public static Connection getConnection(){
		
		Connection conn = null;
		
		try {
			String user	= "scott";
			String pass	= "tiger";
			//String url	= "jdbc:oracle:thin:@접속할 곳의 ip 주소:포트번호:SID";
			//String url	= "jdbc:oracle:thin:@localhost:1521:XE";
			// localhost:3306 => 접속할 곳의 포트이름
			// scott => DB 이름 // serverTimezone=Asia/Seoul => 해당 위치 리셋
			// useSSL=false => 
			String url	= "jdbc:mysql://localhost:3306/scott?serverTimezone=Asia/Seoul&useSSL=false";

			// 1. Driver를 Loading 한다
			Class.forName("com.mysql.cj.jdbc.Driver"); 	// MySQL
			//Class.forName("oracle.jdbc.driver.OracleDriver"); => Oracle 일때
			
			
			// 2. DB에 접속한다.
			conn = DriverManager.getConnection(url, user, pass);
			
			System.out.println("Database에 연결이 되었습니다.");
			
			
		} catch(ClassNotFoundException cnfe) {
			System.out.println("DB Driver Loading Failed : " + cnfe.toString());
		} catch(SQLException sqle) {
			System.out.println("DB 접속 실패 : " + sqle.toString());
		} catch(Exception e) {
			System.out.println("Unknown Error.......");
			e.printStackTrace();
		} 
		
		// 접속되는 정보를 반환한다.
		return conn;
	}
}

 

 

 

package db;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ScottSelectEmp {

	public static void main(String[] args) {
		
		// DB에 연결된 상태(세션)을 담을 객체
		Connection			conn	=	null;
		// SQL문을 나타내는 객체
		PreparedStatement	pstmt	=	null;
		// 쿼리문을 실행한 결과를 담을 객체
		ResultSet			rs	=	null;
		

		try {
			
			// SQL 문장을 만들고 만약에 문자의 질의어(Select)라면
			// 그 결과를 담을 ResultSet 객체를 준비한 후에 실행한다.
			
			// 사원테이블(emp)에서 모든 정보를 사원번호 순으로 추출
			String	sql = "Select * From emp Order by empno";
			
			// 드라이버를 로딩하고, DB에 접속한다.
			conn = DBConnection.getConnection();
			
			// 커넥션을 맺은 곳에 질문할 준비를 한다.
			pstmt = conn.prepareStatement(sql);
			
			// 준비한 질문을 실행 시키고, 결과값을 ResultSet에 넣는다.
			rs = pstmt.executeQuery();
			
			// 찾아온 데이터를 화면에 보여준다.
			System.out.println("EMPNO\tENAME\tJOB\tMGR\tHIREDATE\tSAL\tCOMM\tDEPTNO");
			System.out.println("=======================================================================================");
			
			while(rs.next()) {
				int		empno		=	rs.getInt("empno");
				String	ename		=	rs.getString(2);
				String	job			=	rs.getString("job");
				int		mgr			=	rs.getInt(4);
				Date	hiredate	=	rs.getDate(5);	// hiredate => java.sql.Date
				int		sal			=	rs.getInt(6);
				int		comm		=	rs.getInt(7);
				int		deptno		=	rs.getInt(8);
				
				String	result	=	empno+"\t"+ename+"\t"+job+"\t"+mgr+"\t"+hiredate+"\t"+sal+"\t"+comm+"\t"+deptno;
				System.out.println(result);
			}
			
		} catch(SQLException sqle) {
			System.out.println("Select 문에서 예외가 발생했습니다.");
		} finally {
			// DB 연결을 종료하기 전에 열려진 자원을 닫느다.
			try {
				if(rs		!= null) rs.close();
				if(pstmt	!= null) pstmt.close();
				if(conn		!= null) conn.close();
			} catch (Exception e) {
				throw new RuntimeException(e.getMessage());
			}
		}
		
	}

}

 

 

 

 

 


 

 

 

 

 

테이블 구조를 알아내는 클래스 만들기

 

 

 

meta-data

데이터의 데이터를 말한다.

우리가 사용하는 데이터베이스 내의 데이터를 구성하는 주변 정보들을 말한다.

예를 들어 컬러명, 컬럼타입, 컬럼 카운트 등등을 메타 데이터라고 할 수 있다.

 

ResultSet 자체가 쿼리문의 결과를 가져오는 것이고,

ResultSetMetaData 역시 쿼리문의 결과를 가져온 ResultSet 에 대한 메타 데이터를 가져오는 것.

 

 

 

ResultSetMetaData 는 아래와 같은 메서드들을 가지고 있다.

 

// 컬럼의 갯수를 리턴.
int getColumnCount()

// index의 컬럼명(Select ename AS EN 같은 경우는 EN을 의미한다.)
String getColumnLabel(int index)

// index의 컬럼명(Select ename AS EN 같은 경우는 ename을 의미한다.)
String getColumnName(int index)

// index의 컬럼타입의 정수형(ex. VarChar은 12이다.)
int getColumnType(int index)

// index의 컬럼타입을 직접적인 문자로 리턴한다.
String getColumnTypeName(int index)

// index의 컬럼에 지정된 데이터의 길이를 리턴한다.
int getColumnDisplaySize(int index)

 

 

 

 

 

package db;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import java.sql.ResultSetMetaData;

public class TableDesc {

	public static void main(String[] args) {
		
		BufferedReader		br		=	new BufferedReader(new InputStreamReader(System.in));
		// DB에 연결된 상태(세션)을 담을 객체
		Connection			conn	=	null;
		// SQL문을 나타내는 객체
		Statement			stmt	=	null;
		// 쿼리문을 실행한 결과를 담을 객체
		ResultSet			rs		=	null;
		ResultSetMetaData	rsmd	=	null;
		
		try {
			conn = DBConnection.getConnection();
			
			String fromTable;
			String sql;
			
			System.out.print("보고자하는 테이블의 이름을 입력하십시오 : ");
			fromTable = br.readLine();
			
			sql 	= "Select * from " + fromTable;
			stmt	= conn.createStatement();
			rs		= stmt.executeQuery(sql);
			rsmd	= rs.getMetaData();
			
			int cols	= rsmd.getColumnCount();
			System.out.println("컬럼명\t타입\t타입명\t폭");
			System.out.println("=====================================================");
			
			// Column은 1부터 시작하도록 설정되어 있다.
			// Row는 0부터 시작하도록 설정되어 있다.
			for(int i = 1; i <= cols ; i++) {
				System.out.print(rsmd.getColumnName(i) + " \t");
				System.out.print(rsmd.getColumnType(i) + "\t");
				System.out.print(rsmd.getColumnTypeName(i) + " \t");
				System.out.print(rsmd.getPrecision(i) + " \t");
				System.out.println();
			}
			
		} catch(SQLException sqle) {
			System.out.println("Select 문에서 예외가 발생했습니다.");
		} catch(IOException ie){
			ie.printStackTrace();
		}	
			finally {
			// DB 연결을 종료하기 전에 열려진 자원을 닫느다.
			try {
				if(rs		!= null) rs.close();
				if(stmt	!= null) stmt.close();
				if(conn		!= null) conn.close();
			} catch (Exception e) {
				throw new RuntimeException(e.getMessage());
			}
		}
	}
}

 

728x90
반응형

댓글