Cómo Spring JdbcTemplate obtiene todos los campos de la tabla
1. A través de la clase SqlRowSetMetaData
Utilice las siguientes clases o interfaces:
org.springframework.jdbc.support.rowset.
org .Springframework.jdbc.support.rowset.SqlRowSetMetaData interfaz: Es la interfaz de metadatos correspondiente a SqlRowSet, consistente con java.sql.ResultSetMetaData.
ResultSetMetaData es consistente, pero nunca se generará SQLException. Se pueden obtener instancias de esta clase a través de SqlRowSet
Los ejemplos de uso específicos son los siguientes: SqlRowSet?rowSet?=?jdbcTemplate.queryForRowSet("select?*?from ? usuario?limit?0");?
SqlRowSetMetaData?metaData?=?rowSet.getMetaData();?
int?columnCount?=?metaData.getColumnCount();?
for(int?i?=?1;?i?lt;=?columnCount;?i )?{
Maplt; Stringgt;?fieldMap?=?new ? HashMaplt; String, Stringgt ();?
fieldMap.put("ColumnName",?metaData.getColumnName(i));?
fieldMap.put("ColumnType" , ?String.valueOf(metaData.getColumnType(i)));?
fieldMap.put("ColumnTypeName",?metaData.getColumnTypeName(i));?
fieldMap. put ("CatalogName",?metaData.getCatalogName(i));?
fieldMap.put("ColumnClassName",?metaData.getColumnClassName(i));?
fieldMap. put ("ColumnLabel",?metaData.getColumnLabel(i));?
fieldMap.put("Precision",?String.valueOf(metaData.getPrecision(i)));?
fieldMap.put("Escala",?String.valueOf(metaData.getScale(i)));?
fieldMap.put("SchemaName",?metaData.getSchemaName(i));
fieldMap.put("TableName",?metaData.getTableName(i));?
fieldMap.put("SchemaName",?metaData.getSchemaName(i)); ?
System.out.println(fieldMap);?
}
La información utilizada anteriormente debería aparecer en la lista, pero resultó que solo había algo. información simple y no información relacionada con índices, otras restricciones, etc.
2. A través de la clase RowCountCallbackHandler
Las clases o interfaces utilizadas son las siguientes:
Interfaz org.springframework.jdbc.core.RowCallbackHandler: utilizada para procesar el conjunto de resultados Cada fila de datos;
org.springframework.jdbc.core.RowCountCallbackHandler interfaz: se utiliza para procesar cada fila de datos en el conjunto de resultados;
org.springframework.jdbc Interfaz .core.RowCountCallbackHandler: se utiliza para procesar cada fila de datos en el conjunto de resultados.
Clase RowCountCallbackHandler: implementa la interfaz RowCallbackHandler, que simplemente implementa la obtención de los metadatos del conjunto de resultados, incluido el número de filas, el número de columnas, los nombres de las columnas, los tipos de columnas y otra información. Por cierto, esta instancia de clase solo se puede usar una vez. ;
Se proporciona un método de uso simple en el código fuente, de la siguiente manera: JdbcTemplate?jdbcTemplate?=?new?JdbcTemplate(dataSource);
RowCountCallbackHandler?countCallback?=?new ?RowCountCallbackHandler();?
jdbcTemplate.query("select?*?from?user",?countCallback);?
int?rowCount?=?countCallback.getRowCount() ;
Toda la información que se puede obtener es la siguiente: String?sql?=?"" select?*?from?user";?
RowCountCallbackHandler?rcch?=? new?RowCountCallbackHandler( );?
jdbcTemplate.query(sql,?rcch);?
System.out.println("columna?count?:"?rcch.getColumnCount( )); ?
System.out.println("columna?count?:"? ?rcch.getColumnCount());? ?rcch.getColumnCount());? ;?
for(int?i=0;?ilt;rcch.getColumnCount();?i ){
System.out.println("¿nombre de columna?: "? ? rcch.getColumnNames()[i]);?
System.out.println("¿Tipo de columna? ?rcch.getColumnTypes()[i]);?
}
p>El resultado es el siguiente:
Podemos ver un problema en el resultado. El tipo de columna solo se puede identificar mediante números correspondientes a java.sql. Tipos, podemos obtener los caracteres mediante el siguiente programa Formato de cadena:
String?getTypeName(int?type)? throws?SQLException?{
switch?(type)?{
¿Cambiar?
caso?Types.ARRAY:?
romper;?
caso?Types.BIGINT:?
retorno?"BIGINT"; ?
caso?Tipos.BINARIO:?
retorno?"BINARIO";?
caso?Tipos. BIT:?
retorno?"BIT";?
caso?Tipos.BLOB:?
retorno?"BLOB";?
caso?Tipos.BOOLEAN:?
retorno?"BOOLEAN";?
//...?
}
Como se puede ver en lo anterior, los métodos de esta clase son muy limitados. Solo puede obtener el nombre y el tipo de columna. información, pero no índice, restricciones y otra información.