SQL툴처럼 select한 테이블의 컬럼및 컬럼타입을 알아야 할때가 있습니다.

ResultSet의 ResultSet.getMetaData()에 의해 테이블 메터 정보를 취득할 수 있습니다.


일단 아래와 같은 테이블 정보가 있습니다.

CREATE TABLE IF NOT EXISTS `address` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `addr` varchar(100) NOT NULL,
  `addrNo` varchar(10) NOT NULL,
  `telNo` varchar(20) NOT NULL,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`recNo`)
) AUTO_INCREMENT=1 ;
 
 
INSERT INTO `address` (`name`, `addr`, `addrNo`, `telNo`, `update_time`) VALUES
('김 아무개', '서울 서초구 XXXXX', 'XXX-XXX', '010-1234-1234', '2013-04-07 15:45:26'),
('박 아무개', '서울 강남구 XXXXX', 'XXX-XXX', '010-3451-1234', '2013-04-07 15:45:26');


제가 테스트로 만든 DB정보는 아래와 같습니다.

DB:MySQL

DB명 : test

ID : test

PW : test


[샘플 소스]

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCColumInfo {
 
	public static void main(String args[]) {
 
 
		Connection conn = null;
 
		try {
			// id, pw, dbName, host
			conn = makeConnection("test", "test", "test", "localhost");
 
			Statement stmt = conn.createStatement();
 
			// 쿼리문
			String sql = "select * from address";
 
			ResultSet rs = stmt.executeQuery(sql);
 
			// 메터 정보
			ResultSetMetaData metaInfo = rs.getMetaData();
 
			// 컬럼 갯수
			int count = metaInfo.getColumnCount();
			// 컬럼명과 타입 출력
			for (int i = 0; i < count; i++) {
				System.out.printf("%s : %s\n", metaInfo.getColumnName(i + 1),
						metaInfo.getColumnTypeName(i + 1));
			}
			System.out.println();
 
			// 출력 결과 헤더 출력
			System.out
					.println("------------------------------------------------------------------------------");
			// 컬럼명
			for (int i = 0; i < count; i++) {
				System.out.printf("%s\t ", metaInfo.getColumnName(i + 1));
			}
			System.out
					.printf("\n------------------------------------------------------------------------------\n");
 
			// 결과값 출력
			while (rs.next()) {
				// 레코드 출력
				for (int i = 0; i < count; i++) {
					System.out.printf("%s\t", rs.getString(i + 1));
				}
				System.out.println();
			}
 
			rs.close();
			stmt.close();
 
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
 
	}
 
	/**
	 * 커넥션을 취득해 반환 DB커넥션 취득
	 * 
	 * @param userId
	 * @param userPw
	 * @param dbName
	 * @param host
	 * @return conn 커넥션
	 */
	public static Connection makeConnection(String userId, String userPw,
			String dbName, String host) throws SQLException {
		// TODO Auto-generated method stub
		Connection conn = null;
 
		// DB 접속 문자열 URL 형식
		String url = "jdbc:mysql://" + host + ":3306" + "/" + dbName;
		try {
			// 1. JDBC 드라이버 로드
			Class.forName("com.mysql.jdbc.Driver");
			// 2. DriverManager.getConnection()를 이용하여 Connection 인스턴스 생성
			conn = DriverManager.getConnection(url, userId, userPw);
 
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException sq) {
			sq.printStackTrace();
		}
 
		return conn;
	}
}


[실행결과]

tableMetaInfo.PNG


잘하면 SQL검색 툴도 만들수 있지 않을까요???  select만.....^^;;


감사합니다.