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
반응형
댓글