ResultSet의 데이터를 열 이름과 함께 인쇄합니다.
Java를 통해 SQL 데이터베이스에서 열 이름을 검색하는 중입니다. 수 걸 요.ResultSet
. sql 을 사용합니다.
select column_name from information_schema.columns where table_name='suppliers'
열 을 얻을 수 입니다.ResultSet
내 는 ★★★★★★★★★★★★★★★★★★★★★★.
public void getAllColumnNames() throws Exception{
String sql = "SELECT column_name from information_schema.columns where table_name='suppliers'";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery(sql);
// extract values from rs
}
ResultSet resultSet = statement.executeQuery("SELECT * from foo");
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnsNumber; i++) {
if (i > 1) System.out.print(", ");
String columnValue = resultSet.getString(i);
System.out.print(columnValue + " " + rsmd.getColumnName(i));
}
System.out.println("");
}
레퍼런스: ResultSet 결과 인쇄
) 1) ★★★PreparedStatement
Statement
2) 후 2) 실행 후ResultSet
의 도움을 을 추출합니다.rs.getString()
같이
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(sql);
while(rs.next())
{
rs.getString(1); //or rs.getString("column name");
}
로서 한층 더 이용하다
rs.getString(1);
rs.getInt(2);
1, 2는 테이블의 열 번호이며 column의 데이터 유형에 따라 int 또는 문자열을 설정합니다.
더 나은 버전의 결과 세트 인쇄를 util 클래스로 원하는 분들을 위해 이것은 결과 세트를 인쇄하는 데 큰 도움이 되었고, 한 개의 util로 많은 것을 할 수 있습니다.하미 토룬 덕분이야!
클래스에서는printResultSet
ResultSetMetaData
일반적인 방법으로 그것을 살펴보세요.
import java.sql.*; java.import java.displaces.java.inport java.acaces 입니다.import java.aces.displays.import java.displays" 입니다.문자열 결합기; DBTablePrinter { } * * 의 컬럼유형 카테고리:CHAR
,VARCHAR
* 및 유사한 텍스트 열. */ CATGORY_STRING =CATGORY_STRING = 1 /** * * 의 컬럼유형 카테고리:TINYINT
,SMALLINT
* *INT
★★★★★★★★★★★★★★★★★」BIGINT
컬럼을 클릭합니다. */ CATGERY_public static final int정정 = 2 ; /** * * 의 컬럼유형 카테고리:REAL
,DOUBLE
* 및 * 。DECIMAL
컬럼을 클릭합니다. */ =int 카테고리_DOUBLE 3; /** * 및 에 대한 열 는, * 를 사용해 주세요.DATE
,TIME
,TIMESTAMP
기 *. */*/ CATGUARY_DATETHANGE =CATGORY_DATETIME = 4 /** * * 의 컬럼유형 카테고리:BOOLEAN
컬럼을 클릭합니다. */ int CATGUARY_BOOLAN =CATGUARY_BOOLAN = 5;/** * 이름이 사용되는 의 열 내용 *이렇게 인쇄됩니다.BLOB
* *BINARY
,ARRAY
기 *. */*/ Category_OTHER =카테고리 내기타 = 0;/** * 및 행 수.* " " " " " "네" "네" "네" "네" "네" "네" "네" "네" "네"" */ DEFAULT_MAX_ROWS =int DEFAULT_MAX_ROWS = 10 /** * 열의 (*와 경우:VARCHAR
을 표시합니다. 컬럼을 표시합니다. */ DEFAULT_MAX_TEXT_COL_WIDW =int DEFAULT_MAX_TEXT_COL_WIDW = 150; * 테이블에서 *tableName
* * * * * * * * * * * * * * * * * * * * * * *conn
{@* {@link #DEFAULT_MAX_ROWS} * * 이(가) 제한에 됩니다.* {@link #DEFAULT_MAX_TEXT_COL_WIDW} 가 텍스트컬럼의 폭(예: a * 텍 a a ) 。VARCHAR
열)을 클릭합니다. * 객체* @syslog conn "syslog.sql" 입니다. ) * @ tableName * @table @table * * */ *//////// */*/ printTable conn, {public static void printTable(Connection conn, String tableName) { printTable(conn, tableName, DEFAULT_MAX_ROWS, DEFAULT_MAX_TEXT_COL_WIDW} * 테이블에서 *tableName
* * * * * * * * * * * * * * * * * * * * * * *conn
. 행의 총수는 다음과 같이 제한됩니다.*maxRows
그리고.* 제한에는 {@link #DEFAULT_MAX_TEXT_COL_WIDW}가 사용됩니다.* 텍스트 열의 폭(예:VARCHAR
열)을 클릭합니다. ** @param conn 데이터베이스 연결 개체(java.sql).접속)* @param table 데이터베이스 테이블의 이름* @param maxRows 쿼리 및 인쇄할 최대 행 수*/public static void printTable(Connection conn, String tableName, int maxRows) {printTable(conn, tableName, maxRows, DEFAULT_MAX_TEXT_COL_WIDW);} /*** 테이블에서 행을 인쇄하는 오버로드 메서드tableName
* 지정된 데이터베이스 연결을 사용하여 표준화*conn
. 행의 총수는 다음과 같이 제한됩니다.*maxRows
그리고.*maxStringColWidth
제한에 사용되다* 텍스트 열의 폭(예:VARCHAR
열)을 클릭합니다. ** @param conn 데이터베이스 연결 개체(java.sql).접속)* @param table 데이터베이스 테이블의 이름* @param maxRows 쿼리 및 인쇄할 최대 행 수* @param maxStringColWidth 텍스트 열의 최대 너비*/public static void printTable(Connection conn, String tableName, int maxRows, int maxStringColWidth) {if (syslog == null) {System.err.println("DBTablePrinter 오류:데이터베이스에 연결되어 있지 않습니다(연결은 null입니다).");반품}if (tableName == null) {System.err.println("DBTablePrinter 오류: 테이블 이름이 없습니다(tableName은 null입니다).");반품}if (tableName.length() == 0) {System.err.println("DBTablePrinter 오류: 빈 테이블 이름!");반품}if (max Rows)* 결과 {@link #DEFAULT_MAX_TEXT_COL_WIDW}을(를) 사용하여 표준으로 설정*: 텍스트 열의 너비를 제한합니다. ** @param rs TheResultSet
인쇄하다*/public static void print ResultSet(ResultSet rs) {print Result Set(rs, DEFAULT_MAX_TEXT_COL_WIDW);} /*** 의 행을 인쇄하는 오버로드된 메서드* 결과 표준으로 설정:maxStringColWidth
*: 텍스트 열의 너비를 제한합니다. ** @param rs TheResultSet
인쇄하다* @param maxStringColWidth 텍스트 열의 최대 너비*/public static void print ResultSet(ResultSet rs, int maxStringColWidth) {{을(를) 시험해 보다if (rs == null) {System.err.println("DBTablePrinter 오류: 결과 집합이 null입니다!");반품}(rs.isClosed()) {System.err.println("DBTablePrinter 오류: 결과 집합이 닫혔습니다!");반품}if ( maxStringColWidth columns = new ArrayList(columnCount); // 테이블 이름 목록.결합되어 있는 경우 여러 개일 수 있습니다.// 테이블 쿼리목록 테이블 이름 = 새 ArrayList(columnCount); // 열과 해당 메타데이터를 가져옵니다. // 메모: 열rsmd.getXX 메서드의 인덱스는 0이 아닌 1에서 시작됩니다.for (int i = 1, i maxStringColWidth) {값 = 값입니다.서브스트링(0, maxStringColWidth - 3) + "...";}부서지다} // 열 너비 조정c.setWidth(value.length() > c.getWidth() ? value.length() : c.getWidth() ; c.addValue(값); } // loop column Count의 경우 종료rowCount++; } // 시간 종료(rs.next) /*이 시점에서 우리는 메타 데이터를 검토했습니다.모든 Column 오브젝트를 생성했습니다.이러한 오브젝트를 반복합니다.ResultSet 행 설정, 열 값 입력 및 조정열 너비 우리는 준비해야 하기 때문에 아직 인쇄를 시작할 수 없다.행 구분자 문자열. */ // 재미를 위해 String Builder를 사용합니다.StringBuilder strToPrint = 새 StringBuilder();StringBuilder rowSeparator = 새 StringBuilder(); /*행 구분 기호와 함께 인쇄할 열 레이블을 준비합니다. 다음과 같이 표시됩니다. +------+-------------------------------------------------------------------------------------------------------| EMP_NO | BORTH_DATE | FIRST_NAME | LAST_NAME | (라벨 행)+------+-------------------------------------------------------------------------------------------------------*/ // 열에 걸쳐 반복(c열 : 열) {int width = c.getWidth(); // 열 레이블 가운데 맞춤인쇄할 문자열;문자열 이름 = c.getLabel();int diff = width - name.length(); if ((diff % 2) == 1)// diff는 2로 나눌 수 없습니다.폭에 1을 더합니다(및 diff).// 좌우에 균일한 패딩을 할 수 있도록// 열 레이블의 경우 폭++;diff++;c. setWidth(폭); } int padding Size = diff / 2; // InteliJ는 int로의 캐스팅은 용장하다고 말합니다. // stackoverflow.com user102008 덕분에 Cool String 리피터 코드가 생성되었습니다. 문자열 패딩 = 새 문자열(new char[paddingSize]).replace("\0", "; 인쇄 방법 = "| " + 패딩 + 이름 + 패딩 + ";// END(종료) 열 레이블 중심 맞춤 strToPrint.append(toPrint); rowSeparator.append("+");rowSeparator.append(새 문자열(새 문자[너비 + 2]).치환 \ 0 " , " ) ;} 문자열 lineSeparator = System.getProperty("line.separator"); // 이게 정말 필요한가요? lineSeparator = lineSeparator == null? "\n" : lineSeparator; rowSeparator.append("+").append(lineSeparator); strToPrint.append("|").append(lineSeparator); strToPrint.insert(0, rowSeparator); strToPrint.append(rowSeparator); StringJoiner sj = 새로운 StringJoiner() , ";(문자열 이름: table Names) {sj.add(이름); } 문자열 정보 = "인쇄 중 " + rowCount;info += rowCount > 1 ? " " " " 행 " ;info += tableNames.size() > 1 ? "table " : "table ";info += sj.toString(); System.out.println(info); // 형식화된 열 레이블 인쇄System.out.print(strToPrint.toString()); 문자열 형식 // 행 인쇄(int i = 0; i)의 경우* 정수는 잘라내지 않아야 합니다. 따라서 열 너비는 잘라야 합니다.* 열 너비 제한 없이 조정됩니다.텍스트 열은 다음과 같아야 합니다.* 왼쪽 맞춤이며 최대 열 너비 등으로 잘릴 수 있습니다... ** ** java.sql. * 유형* @param type 반 sql sql SQL @ @ @ @ @ 이 * @return return * * *// /// */*/ which Category type) {카테고리(int ){ type {의 어느 쪽인가.{case Types( 유형 타입TINYINT: 타입 타입INTEGER:를 반환한다정수 타입타입10진수:한다.DOBUBLE_DOUBLE이 되다. ★★★★★★★★★★★★★★★★★DA타입타입TIME_WITH_TIMEZONE: 타입TIMESTamp:' 유형 types'TIMESTamp_WITH_TIMEZONE:TIMESTAMP_WITH_TIMEZONE합니다;카테고리_DATETIME을 반환한다. BOOLAN:반환한다;카테고리_부울리언을 반환한다. VARCHAR:사건 유형.케이스 타입NVARCHAR: NVARCHAR:사건 유형.케이스 타입LONGVARCHAR: 긴 바차:사건 유형.케이스 타입LONGNVARCHAR: 긴 메시지:사건 유형.케이스 타입CHAR: 문자:사건 유형.케이스 타입NCHAR:NCHAR: 돌아오CATEGORY_STRING. CATGORY_STRING을 반환한다. 기본: 디폴트:CATEGORY_OTHER 돌아오; 카테고리_기타 반환.} }} } * 을 나타냅니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」 */ 열 {private static " " { * * 열 * * 。 */ 레이블개인 문자열 라벨 * 에서* SQL* * * java.sql.* . * /*/ 유형private int 타 private * 에서* SQL ( * * java.sql.* . * /*/ 문자열 "typeName"; * 열열 하는 값.* 및 * * * 。 */ width =private int width = 0; * 의 각 값*
ResultSet
*/ 정보 값 =새"ArrayList()" = "ArrayList()"; * 를 사용한 맞춤String.format
*(* 빈빈 。""
)는, 「」,대시(*)입니다.-
하여 왼쪽을 정렬합니다를 사용하여 왼쪽을 클릭합니다. * @ "# Left* @ "#justifyLeft()" */ 은 개인 문자열 """ = "",= " , * 열 카테고리* 열 * * * * * * * * * * * * * 。 *를 사용합니다* 올바른 인쇄를 위해 필요한 열 유형 및 특정 필요성에 대해 설명합니다. */ type Category =개인 int 유형 카테고리 = 0; * 새로운 * 을 구축합니다.Column
" " " " " " " * 범용 ( 에서 정의)* "SQL" "SQL" ("SQL")* * * java.sql.* * 이름* @param label 유형* @param type 반 sql SQL 형 @ @ @ @ 이름* @param typeName par sqlSQL */ column ( 타입, {public Column(「」, 「int」, 「String typeName」) {=this.label = 라;; =this.type = 유;; =this.typeName = typeName; } * 열합니다.* * * * * * * * * * * * * * * 。 * * 라벨* @return return럼* * * */*/ 문자열 Label {() {return label}을 가져옵니다.} * 합니다.* SQL 입니다. * * 유형* @return 용 sql sqlSQL 형*/ getType {public int getType() { 유형} * 합니다.* SQL 입니다. * * 이름* @return SQL sql*/ 문자열 {() { typeNametypeName type type type type type 。} * 합니다.* 열의 너비를 반환합니다. * * 열 * @return 열 */ */ getWidth {public int getWidth() { 폭턴턴폭}} * 열를 * 의음음음음음음음음음음음음음음음 * / / / / / /로 설정합니다.width
* * 열* @markets @markets **/*/ setWidthwidth) {public void setWidth(int width) {이것 폭;너 = }}} * * 를 추가합니다.String
표현)value
* 이입니다.* @link #values {@link #values} 입니다. * 이러한 값은 의 각 행에서 가져옵니다. * 세트쿼리의 * " " " " * " 입니다.(*) * 열 값* @link values {@link #values} paramparam #} * /*/ void Value ( 값) { add Value(「」)값); values.add(값)}; } * * 에 열 값을 반환합니다.i
되므로 * 0으로 시작합니다.getValue(0)
(*의) (*의* 결과 ** 결 * * 。 * * @i 열 @parami* @return @return 값 */ */*/ 문자열 i) {getValue( i) {i);반).get(i); } * * {@link #justify} 의 값을 반환합니다.플래그.은 *을(를) 사용하여 인쇄합니다.String.format
는 글의을 나타낼 때 합니다.* 이 플래그는 텍스트의 오른쪽 또는 왼쪽 맞춤에 사용됩니다. * * @return {@link #justify}}이 열의 #justifyLeft* @ "#justifyLeft()" */ 문자열 {get Justify Flag() { justify Flag가 있습니다. ★★★★} * * {@link #justify} flag /agag ag / / / / / / / / / / / / / / / / / / / /"-"
열은 다음과 같이 인쇄하면 으로 남습니다.* 열 값은 다음과 같이 인쇄하면 올바른 값으로 유지됩니다.*String.format
. 일반적으로 숫자는 정확합니다.* 정당화 되어 텍스트는 정당화 됩니다. */ Left ( 맞맞 = - , }} * 합니다.* SQL 입니다. * * @return 의@ {@link #typeCategory} */ getTypeCategory {public int getTypeCategory() { typeCategorytype Category를 반환한다.} * 합니다.* {@link #type Category}입니다. * * @param type 카테고리 형// * /*/ void Type Category (Category 공용 void setTypeCategory(int typeCategory) { =this.typeCategory = typeCategory; }}}
이건 스칼라 버전이에요일반적인 방법으로 열 이름과 데이터도 인쇄합니다.
def printQuery(res: ResultSet): Unit = {
val rsmd = res.getMetaData
val columnCount = rsmd.getColumnCount
var rowCnt = 0
val s = StringBuilder.newBuilder
while (res.next()) {
s.clear()
if (rowCnt == 0) {
s.append("| ")
for (i <- 1 to columnCount) {
val name = rsmd.getColumnName(i)
s.append(name)
s.append("| ")
}
s.append("\n")
}
rowCnt += 1
s.append("| ")
for (i <- 1 to columnCount) {
if (i > 1)
s.append(" | ")
s.append(res.getString(i))
}
s.append(" |")
System.out.println(s)
}
System.out.println(s"TOTAL: $rowCnt rows")
}
문서를 참조하십시오.당신은 다음과 같은 실수를 저질렀습니다.일단은ps.executeQuery()
파라미터가 없습니다.대신 SQL 쿼리를 전달했습니다.
두 번째로, 준비된 성명서는?
매개 변수를 전달하려면 기호를 누르십시오.그리고 나중에 다음을 사용하여 바인드합니다.
setXXX(index, value)
여기서 xxx는 데이터 유형을 나타냅니다.
훌륭한 Java 데이터 과학/데이터 프레임 라이브러리인 TableSaw 라이브러리를 사용할 수 있습니다.코드는 간단합니다.
System.out.println(Table.read().db(resultSet).print());
당신이 하려는 일을 위해서,PreparedStatement
사용할 수 있습니다.Statement
코드는 다음과 같이 수정될 수 있습니다.
String sql = "SELECT column_name from information_schema.columns where table_name='suppliers';";
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery(sql);
이게 도움이 됐으면 좋겠다.
rowMapper incont를 사용한 솔루션.
저장소 클래스:
jdbcTemplate.query(sqlRequest, new ResponseQuikRowMapper())
행 매퍼 클래스:
public class ResponseQuikRowMapper implements RowMapper<Map<String, String>> {
@Override
@SneakyThrows
public Map<String, String> mapRow(ResultSet rs, int rowNum) {
return IntStream.range(1, rs.getMetaData().getColumnCount())
.mapToObj(columnNumber -> getColumnName(rs, columnNumber))
.collect(Collectors.toMap(column -> column, value -> getColumnValue(rs, value)));
}
@SneakyThrows
private String getColumnName(ResultSet rs, Integer columnNumber) {
return rs.getMetaData().getColumnName(columnNumber);
}
@SneakyThrows
private String getColumnValue(ResultSet rs, String column) {
return Optional.ofNullable(rs.getString(column)).orElse("");
}
HashMap은 단순 매트릭스입니다.여기서 키는 열 이름이고 값은 값입니다. : )
언급URL : https://stackoverflow.com/questions/24229442/print-the-data-in-resultset-along-with-column-names
'itsource' 카테고리의 다른 글
치명적인 오류: 유효하지 않은 히프 제한 부근의 마크 콤팩트 할당 실패 - Ionic 3의 JavaScript 힙 메모리 부족 (0) | 2022.09.04 |
---|---|
Pentaho 데이터 통합 SQL 연결 (0) | 2022.09.04 |
JavaScript에서 스크립트를 종료하려면 어떻게 해야 합니까? (0) | 2022.09.04 |
LAST_INSERT_를 사용하여 여러 테이블에 삽입PDO준비명세서내 아이디 (0) | 2022.09.04 |
JavaScript에서 날짜/시간을 빼는 방법 (0) | 2022.09.04 |