recorrer - obtener numero de columnas resultset java
¿Cómo puedo obtener diferentes tipos de datos de ResultSetMetaData en Java? (4)
Tengo un ResultSet que devuelve datos de diferentes tipos. La consulta se construye dinámicamente, por lo que, en el momento de la compilación, no sé qué tipo de valor devolverá la consulta.
He escrito el siguiente código asumiendo que todos los resultados son cadenas. Pero también quiero obtener el tipo de cada valor. ¿Cómo puedo hacer esto?
A continuación se muestra el código que he escrito.
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
En este punto, me gustaría obtener el tipo de columna y obtener el valor de acuerdo con el tipo de datos.
Creo que la respuesta anterior no va en bucle y falta algo de detalles. Este fragmento de código puede mejorar para mostrar solo el nombre de columna y el tipo de datos correspondiente. Aquí está el código completamente funcional
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class Test {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String HOST = "192.168.56.101";
private static final String PORT = "3316";
private static final String CONNECTION_URL = "jdbc:mysql://"+HOST+":"+PORT+"/";
private static final String USERNAME = "user";
private static final String PASSWORD = "pwd";
private static final String DATABASE = "db";
private static final String TABLE = "table";
private static final String QUERY = "select * from "+DATABASE+"."+TABLE+" where 1=0";
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName(DRIVER);
Connection con = DriverManager.getConnection (CONNECTION_URL , USERNAME, PASSWORD);
ResultSet rs = con.createStatement().executeQuery(QUERY);
if (rs != null) {
System.out.println("Column Type/t/t Column Name");
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.println(rsmd.getColumnTypeName(i)+"/t/t/t"+rsmd.getColumnName(i));
}
}
}
}
El ResultSetMetaData.getColumnType(int column)
devuelve un valor int
que especifica el tipo de columna que se encuentra en java.sql.Types
.
Ejemplo:
Connection connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
PreparedStatement statement = connection.prepareStatement(JDBC_SELECT);
ResultSet rs = statement.executeQuery();
PrintStream out = System.out;
if (rs != null) {
while (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
if (i > 1) {
out.print(",");
}
int type = rsmd.getColumnType(i);
if (type == Types.VARCHAR || type == Types.CHAR) {
out.print(rs.getString(i));
} else {
out.print(rs.getLong(i));
}
}
out.println();
}
}
Puedes llamar,
Para devolver el tipo de columna designado de SQL.
int ResultSetMetaData.getColumnType(int column)
Para devolver el nombre de tipo específico de la base de datos de la columna designada.
String ResultSetMetaData.getColumnTypeName(int column)
ResultSet rs;
int column;
.....
ResultSetMetaData metadata = rs.getMetaData();
metadata.getColumnTypeName(column); // database specific type name
metadata.getColumnType(column); // returns the SQL type