반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- include액션태그
- 동기화
- 아이디중복
- ID중복
- first-child
- 메모리스트림
- interrupt()
- 리눅스셋팅
- 상관 서브 쿼리
- ThreadGroup()
- InputDialog
- String char[] 형변환
- StringWriter
- 리눅스세팅
- 표현 언어
- Linux세팅
- Linux셋팅
- 상관서브쿼리
- MemoryStream
- Daemon()
- char[] String 형변환
- 스레드그룸
- sleep()메소드
- isinterrupted()
- StringReader
- include 지시자
- ObjectInputStream
- interrupted()
- include지시자
- first-of-child
Archives
- Today
- Total
다연이네
[days05] ResultSet 결과물에 대한 정보 추출, 사용 예제, ResultSetMetaData 본문
반응형
package days05;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Scanner;
import com.util.DBConn;
/**
* @author dayeon
* @date 2020. 11. 27-오후 3:48:37
* @subject ResultSet 결과물에 대한 정보 추출, 사용 예제
* @content
*/
public class Ex03 {
public static void main(String[] args) {
//select * from emp; 쿼리 날렸을때 결과물을 rs가 담고 있는 것
String sql = "SELECT table_name " +
" FROM tabs " +
" order by table_name ASC";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
con = DBConn.getConnection();
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
int no = 1;
while (rs.next()) {
System.out.printf("%d. %s\n",no++, rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
pstmt.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//finally
//
System.out.print("> 테이블을 선택하세요?");
Scanner scanner = new Scanner(System.in);
String tableName = scanner.next();//테이블 이름 저장하기
sql = "SELECT * FROM "+ tableName; //컬럼명이나 테이블명은 ? 못씀ㅠㅠ
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
//rs 객체로부터 정보 (컬럼개수, 컬럼명, 컬럼자료형 등등) 추출
ResultSetMetaData rsmd= rs.getMetaData(); //rs의 정보를 얻어오는 메소드
//리턴값은 마우스 대서 복붙
//컬럼개수 출력
System.out.println("> 컬럼 개수 : "+rsmd.getColumnCount());
System.out.println("--------------------------------------------------------------------------------------------");
for (int i =1; i <= rsmd.getColumnCount(); i++) {
System.out.printf("%s\t", rsmd.getColumnName(i));
}
System.out.println();
System.out.println("--------------------------------------------------------------------------------------------");
//나중에는 칼럼 개수만큼 선 길이도 늘리게 코딩
//rs.next();
while(rs.next()) {
//rs.getInt("empno"); //어떤 테이블을 선택하냐에 따라 다르니까 get int/double/String 정할수가 없어
for (int i = 1; i <=rsmd.getColumnCount(); i++) {
//크게는 String, int, Date, double (자주쓰는애들)
//System.out.println(rsmd.getColumnType(i)); //1, 12 등 숫자형을 돌림
//System.out.println(rsmd.getColumnTypeName(i)); //NUMBER, VARCHAR2 등 문자 돌림
int scale = rsmd.getScale(i); // Number(7,2) 뒤에 2가 scale임
int columnType = rsmd.getColumnType(i);
if (columnType == Types.NUMERIC && scale ==0) { //정수란 소리
System.out.printf("%d\t",rs.getInt(i));
}else if(columnType == Types.NUMERIC && scale !=0) {//실수란 소리
System.out.printf("%.2f\t", rs.getDouble(i));
}else if(columnType == Types.VARCHAR|| columnType == Types.CLOB) {//문자
System.out.printf("%s\t", rs.getString(i));
}else if(columnType == Types.DATE|| columnType == Types.TIMESTAMP) {//날짜
System.out.printf("%tF\t", rs.getDate(i));
//날짜는 %f , %tF, %s 상관 없음
}//if
}//for
System.out.println();
}//while
System.out.println();
System.out.println("--------------------------------------------------------------------------------------------");
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//main
}//class
반응형
'JDBC' 카테고리의 다른 글
[days06] 부서번호를 입력받아 해당 사원 정보 출력하기 (0) | 2020.11.30 |
---|---|
[days05] 저장 프로시저 (stored procedure)를 사용하는 CallableStatement 예제 (0) | 2020.11.29 |
[days04] 게시판 만들기 (0) | 2020.11.26 |
[days04] 월급 금액 등급별로 사원 정렬해서 출력하기 (0) | 2020.11.26 |
[days04] DTO, VO, DAO, 자바빈즈, POJO 용어 정리 (0) | 2020.11.26 |
Comments