java. sql. ResultSetMetaData 인터페이스 사용 (결과 집합 메타 데이터)
columnCount
결과 집합의 열 수 columnName
열의 이름 / / select columnName as columnLabel... columnLabel
열의 다른 이름 (label) columnClassName
자바 에 대응 하 는 종류 (협조 가능 Class.forName(String className)
가 져 오기 Class
형식의 반환 값) columnType
데이터베이스 에 열 거 된 형식 (수치 번호) columnTypeName
데이터베이스 에 열 거 된 형식 이름 columnDisplaySize
열 크기 ResultSet
- > ResultSetMetaData
결과 집 ResultSet
과 결과 집 메타 데이터 ResultSetMetaData
는 JDBC 표준 중의 인터페이스 | 표준 이다.java.sql.ResultSet
java.sql.ResultSetMetaData
metaData
, 메타 데이터.resultSet
인용 을 통 해 메타 데이터 정 보 를 얻 을 수 있 습 니 다. ResultSetMetaData resultSet.getMetaData()
그리고 metaData
에 따라 원 하 는 데 이 터 를 얻 을 수 있 습 니 다.API
// getCon
String sql = "select username as 'U', password from user";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
System.out.println(metaData.toString());
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
String columnLabel = metaData.getColumnLabel(i);
String columnClassName = metaData.getColumnClassName(i);
int columnType = metaData.getColumnType(i);
String columnTypeName = metaData.getColumnTypeName(i);
int columnDisplaySize = metaData.getColumnDisplaySize(i);
System.out.printf("%s %s %s %s %s %s %s
",
i, columnName, columnLabel, columnClassName, columnType, columnTypeName, columnDisplaySize);
}
출력:
com.mysql.jdbc.ResultSetMetaData@41906a77 - Field level information:
com.mysql.jdbc.Field@4b9af9a9[catalog=easyui,tableName=user,originalTableName=user,columnName=U,originalColumnName=username,mysqlType=253(FIELD_TYPE_VAR_STRING),flags=, charsetIndex=33, charsetName=UTF-8]
com.mysql.jdbc.Field@5387f9e0[catalog=easyui,tableName=user,originalTableName=user,columnName=password,originalColumnName=password,mysqlType=253(FIELD_TYPE_VAR_STRING),flags=, charsetIndex=33, charsetName=UTF-8]
1 username U java.lang.String 12 VARCHAR 50
2 password password java.lang.String 12 VARCHAR 50
이 중
com.mysql.jdbc.Field
은 JDBC
기준 에 부합 하 는 구체 적 인 실현 이다.code
다음 도구 류 는 이전 도구 류 에 대한 보충 이다.JDBC CRUD 도구 DBUtil
import cn.jt.pojo.User;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Arrays;
/**
* RowMapper
* +
* @author wyj
* @create 2019-04-28 18:24
*/
public class MapperGetter {
/** RowMapper 。
* JavaBean, 。 OCP(Open Close Principle)。
*/
public static RowMapper getUserMapper() {
RowMapper mapper = new RowMapper() {
@Override
public User mapRow(ResultSet rs) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
};
return mapper;
}
/** , RowMapper
*
*/
public static RowMapper getMapper(Class clazz) {
RowMapper mapper = new RowMapper() {
@Override
public T mapRow(ResultSet rs) throws SQLException {
T obj = null;
try {
obj = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
String[] columnLabelArr = new String[columnCount];
for (int i = 0; i < columnCount; i++) {
columnLabelArr[i] = metaData.getColumnLabel(i + 1);
}
System.out.println(Arrays.toString(columnLabelArr));
for (int i = 0; i < columnCount; i++) {
String columnLabel = columnLabelArr[i];
Method setter = null;
try {
setter = clazz.getDeclaredMethod(setterNameWrapper(columnLabel)); // username -> setUsername()
setter.invoke(obj, rs.getObject(columnLabel)); // obj.setUsername(rs.getObject("username"));
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
return obj;
}
};
return mapper;
}
/**
* setter wrapper
* @param name
* @return
*/
private static String setterNameWrapper(String name) {
return "set" + nameWrapper(name);
}
/**
*
* @param str
* @return
*/
private static String nameWrapper(String str) {
String firstChar = String.valueOf(str.charAt(0));
return str.replaceFirst(firstChar, firstChar.toUpperCase()); //
// return firstChar.toUpperCase() + str.substring(1, str.length()); //
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
소스 코드가 포함된 Python 프로젝트텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.