L'obtention de la JDBC types de colonne
J'ai besoin de demander au sujet de ma colonne jdbc de type dans un tableau, aujourd'hui, je suis en boucle jeter mes colonnes et ensuite de demander à propos de son type, voir mon code ci-dessous :
public int getColumnDataTypeFromDB(String columnName) {
int datatype = 0;
ResultSet columns = null;
try {
String schema =
getMetaDataCatalogName() != null
? getMetaDataCatalogName()
: getMetaDataSchemaName();
if (TableManagerFactory.isCatalogBasedDatabase()) {
columns =
getMetaData().getColumns(
schema,
null,
tableName,
columnName);
} else {
columns =
getMetaData().getColumns(
null,
schema,
tableName,
columnName);
}
// columns =
// getMetaData().getColumns(getMetaDataCatalogName(), getMetaDataSchemaName(), tableName, columnName);
if (columns.next()) {
datatype = columns.getInt("DATA_TYPE");
}
} catch (SQLException ex) {
Log.error(
this,
"Error while getting columns information: " + ex.getMessage(),
ex);
//return false;
} catch (DDLCreationException ex) {
Log.error(this, ex.getMessage());
} finally {
try {
if (columns != null) {
columns.close();
}
} catch (SQLException ex) {
Log.error(this, ex.getLocalizedMessage());
}
}
return datatype;
}
Puis-je obtenir toutes les colonnes de métadonnées dans un tel tableau en même temps ?
si oui, comment puis-je le faire ??
Avez-vous essayé la réponse?
OriginalL'auteur Salah | 2013-08-04
Vous devez vous connecter pour publier un commentaire.
Les paramètres de
DatabaseMetaData.getColumns(..)
sont censés être unLIKE
-modèle. Donc, si vous voulez obtenir toutes les colonnes d'un tableau, il vous suffit de passer dans"%"
pour le dernier paramètre,columnNamePattern
:Certains pilotes (aussi) permettent
null
ici, mais pas tous les pilotes (JDBC de la spécification et de la documentation de l'API n'est pas entièrement clair si cela est autorisé ou non pour ce paramètre)OriginalL'auteur Mark Rotteveel
Utilisation de jdbc ResultSetMetaData classe pour obtenir les informations détaillées sur les colonnes de la table.
d'accélérer les choses, vous devriez vraiment utiliser "select * from nomtable where 1 = 2" n'est pas une déclaration exacte, car il dépend de la base de données du moteur de l'exécution de la requête. J'ai travaillé avec des bases de données que de faire une analyse de la table pour déterminer il n'y a pas les enregistrements qui satisfont à la condition "1=2". Je suis d'accord que "cela fonctionnera mieux si 0 lignes sont renvoyées à partir de la requête", mais il doit être fait d'une manière qui est spécifique au moteur de l'exécution de la requête.
Pourquoi le
where 1<0
? (ou1=2
de @lance-java)OriginalL'auteur Shamim Ahmmed
Il semble que vous êtes à la recherche pour le type de données de la colonne puis getColumnTypeName serait une
OriginalL'auteur saub90