IT/Java

java - console에 DB데이터 출력(행갯수, 열갯수, 열제목, 데이터), ResultSetMetaData

노마드오브 2018. 11. 21. 23:04

package com.example.jdbc;


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 JDBCConsole {


public static void main(String[] args) {

String url = "jdbc:h2:tcp://localhost/~/mydb";

String user = "sa";

String pwd = "";

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

try {

// 1. 드라이버 로딩

Class.forName("org.h2.Driver");

// 2. DB 연결

con = DriverManager.getConnection(url, user, pwd);

// 3. 문장객체 생성

stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

String sql = "select * from customer";

// 4. 실행

rs = stmt.executeQuery(sql);

ResultSetMetaData rsmd = rs.getMetaData();

// 열의 개수

int colCount = rsmd.getColumnCount();

System.out.println("열의 개수:" + colCount);

// 커서가 맨 마지막 행으로 이동

rs.last();

// 행의 개수

int rowCount = rs.getRow();

System.out.println("행의 개수:" + rowCount);

// 열제목 출력

for (int i=1; i<=colCount; i++) {

System.out.print(rsmd.getColumnName(i) + "\t");

}

System.out.println("\n");

// 첫번째 행으로 커서 이동

// rs.first();

// 마지막 행 바로 다음으로 커서 이동

// rs.afterLast();

// 지정된 커서 행으로 이동

// rs.absolute(2);;

// 첫행 바로 이전으로 커서 이동 (초기 위치)

rs.beforeFirst();

// while (rs.next()) {

//

// }

for (int r=1; r<=rowCount; r++) { // 행

rs.next();

for (int c=1; c<=colCount; c++) { // 열

System.out.print(rs.getObject(c) + "\t");

}

System.out.println();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (stmt != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (con != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}


}