강좌 & 팁
글 수 2,412
2013.04.07 15:53:00 (*.52.177.249)
47981
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; } }
[실행결과]
잘하면 SQL검색 툴도 만들수 있지 않을까요??? select만.....^^;;
감사합니다.