J'ai un ResultSet qui renvoie des données de différents types. La requête est construite dynamiquement donc, au moment de la compilation, je ne sais pas quel type de valeur la requête renverra.
J'ai écrit le code suivant en supposant que tous les résultats sont des chaînes. Mais je veux aussi obtenir le type de chaque valeur. Comment puis-je faire ceci?
Voici le code que j'ai écrit.
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
À ce stade, je voudrais obtenir le type de colonne et obtenir la valeur en fonction du type de données.
ResultSetMetaData.getColumnType(int column)
renvoie une valeur int
spécifiant le type de colonne trouvé dans Java.sql.Types
.
Exemple:
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();
}
}
Tu peux appeler,
Pour retourner le type SQL de la colonne désignée.
int ResultSetMetaData.getColumnType(int column)
Pour renvoyer le nom de type spécifique à la base de données de la colonne désignée.
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
Je pense que la réponse ci-dessus ne va pas en boucle et manque de détails. Cet extrait de code peut être amélioré pour afficher uniquement le nom de colonne et le type de données correspondant. Voici le code entièrement fonctionnel
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));
}
}
}
}