Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC DatabaseMetaData란 무엇이고 왜 중요할까?


일반적으로 데이터에 대한 데이터를 메타데이터(metadata)라고 합니다. JDBC에서 DatabaseMetaData 인터페이스는 현재 연결된 데이터베이스에 대한 다양한 정보를 조회할 수 있는 메서드를 제공합니다. 예를 들어 데이터베이스 이름, 드라이버 버전, 최대 컬럼 길이 등을 확인할 수 있습니다.

DatabaseMetaData는 애플리케이션이 실행 환경의 데이터베이스 기능을 동적으로 파악해야 할 때 특히 유용합니다. 특정 DBMS에서만 지원하는 기능을 사용하기 전에 지원 여부를 먼저 확인하면 이식성 높은 코드를 작성할 수 있습니다.

DatabaseMetaData의 주요 메서드

메서드설명
getDriverName()현재 사용 중인 JDBC 드라이버의 이름을 반환합니다.
getDriverVersion()현재 JDBC 드라이버의 버전을 반환합니다.
getUserName()데이터베이스에 접속한 사용자 이름을 반환합니다.
getDatabaseProductName()현재 연결된 데이터베이스 제품의 이름을 반환합니다.
getDatabaseProductVersion()현재 데이터베이스 제품의 버전을 반환합니다.
getNumericFunctions()해당 데이터베이스에서 사용 가능한 수학 함수 목록을 반환합니다.
getStringFunctions()해당 데이터베이스에서 사용 가능한 문자열 함수 목록을 반환합니다.
getSystemFunctions()해당 데이터베이스에서 사용 가능한 시스템 함수 목록을 반환합니다.
getTimeDateFunctions()해당 데이터베이스에서 사용 가능한 날짜·시간 함수 목록을 반환합니다.
getURL()현재 연결된 데이터베이스의 URL을 반환합니다.
supportsSavepoints()현재 데이터베이스가 세이브포인트(savepoint)를 지원하는지 확인합니다.
supportsStoredProcedures()현재 데이터베이스가 저장 프로시저(stored procedure)를 지원하는지 확인합니다.
supportsTransactions()현재 데이터베이스가 트랜잭션을 지원하는지 확인합니다.

사용 예제

다음 예제는 Connection 객체에서 getMetaData() 메서드를 호출하여 DatabaseMetaData 객체를 얻고, 배치 업데이트 지원 여부와 함께 드라이버 정보, 사용자 정보, 각종 함수 목록을 조회하는 방법을 보여줍니다.

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
public class DatabaseMetadataExample {
    public static void main(String args[])throws Exception {
        // 연결 생성
        String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");

        // DatabaseMetaData 객체 생성
        DatabaseMetaData dbMetadata = con.getMetaData();
        // supportsBatchUpdates() 메서드 호출
        boolean bool = dbMetadata.supportsBatchUpdates();

        if(bool) {
            System.out.println("Underlying database supports batch updates");
        } else {
            System.out.println("Underlying database doesnt supports batch updates");
        }

        // 드라이버 이름 조회
        System.out.println(dbMetadata.getDriverName());
        // 드라이버 버전 조회
        System.out.println(dbMetadata.getDriverVersion());
        // 사용자 이름 조회
        System.out.println(dbMetadata.getUserName());
        // URL 조회
        System.out.println(dbMetadata.getURL());
        // 수학 함수 목록 조회
        System.out.println("Numeric functions: "+dbMetadata.getNumericFunctions());
        System.out.println("");
        // 문자열 함수 목록 조회
        System.out.println("String functions: "+dbMetadata.getStringFunctions());
        System.out.println("");
        // 시스템 함수 목록 조회
        System.out.println("System functions: "+dbMetadata.getSystemFunctions());
        System.out.println("");
        // 날짜·시간 함수 목록 조회
        System.out.println("Time and Date funtions: "+dbMetadata.getTimeDateFunctions());
    }
}

실행 결과

Connection established......
Underlying database supports batch updates
MySQL-AB JDBC Driver
mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} )
root@localhost
jdbc:mysql://localhost/sampleDB
Numeric functions:
ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,COT,DEGREES,EXP,FLOOR,LOG,LOG10,MAX
,MIN,MOD,PI,POW,POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE
String functions:
ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,CONCAT_WS,CONV,ELT,E
XPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LO
CATE,LOWER,LPAD,LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,QUOTE,REPEA
T,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTR
ING,SUBSTRING,SUBSTRING_INDEX,TRIM,UCASE,UPPER
System functions:
DATABASE,USER,SYSTEM_USER,SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION
Time and Date funtions:
DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,H
OUR,MINUTE,SECOND,PERIOD_ADD,PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT
,CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,CURRENT_TIMESTAMP,UNIX_TIME
STAMP,FROM_UNIXTIME,SEC_TO_TIME,TIME_TO_SEC