Reputation: 16050
I´m loading data from MySQL DB into Java application. How to define column type? I.e. how to check if it´s varchar, int, etc? I suppose that ´metadata´ might be useful. Any example will be appreciated.
Connection con = getConnection();
Statement statement = con.createStatement();
int rs = statement.executeQuery(q);
ResultSetMetaData meta = rs.getMetaData();
colCount = meta.getColumnCount(); // nr of columns
//...HOW TO GET COLUMN TYPES HERE?
Upvotes: 2
Views: 246
Reputation: 57316
What you need to use is ResultSetMetaData
. Once you get your resultset, you can get its metadata in this way:
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
ResultSetMetaData rsMetaData = rs.getResultSetMetaData();
Then you can get all the required info from there:
int numberOfColumns = rsMetaData.getColumnCount();
for(int i=0; i<numberOfColumns; i++)
{
System.out.println("column MetaData ");
System.out.println("column number " + i);
// indicates the designated column's normal maximum width in
// characters
System.out.println(rsMetaData.getColumnDisplaySize(i));
// gets the designated column's suggested title
// for use in printouts and displays.
System.out.println(rsMetaData.getColumnLabel(i));
// get the designated column's name.
System.out.println(rsMetaData.getColumnName(i));
// get the designated column's SQL type.
System.out.println(rsMetaData.getColumnType(i));
// get the designated column's SQL type name.
System.out.println(rsMetaData.getColumnTypeName(i));
// get the designated column's class name.
System.out.println(rsMetaData.getColumnClassName(i));
// get the designated column's table name.
System.out.println(rsMetaData.getTableName(i));
// get the designated column's number of decimal digits.
System.out.println(rsMetaData.getPrecision(i));
// gets the designated column's number of
// digits to right of the decimal point.
System.out.println(rsMetaData.getScale(i));
// indicates whether the designated column is
// automatically numbered, thus read-only.
System.out.println(rsMetaData.isAutoIncrement(i));
// indicates whether the designated column is a cash value.
System.out.println(rsMetaData.isCurrency(i));
// indicates whether a write on the designated
// column will succeed.
System.out.println(rsMetaData.isWritable(i));
// indicates whether a write on the designated
// column will definitely succeed.
System.out.println(rsMetaData.isDefinitelyWritable(i));
// indicates the nullability of values
// in the designated column.
System.out.println(rsMetaData.isNullable(i));
// Indicates whether the designated column
// is definitely not writable.
System.out.println(rsMetaData.isReadOnly(i));
// Indicates whether a column's case matters
// in the designated column.
System.out.println(rsMetaData.isCaseSensitive(i));
// Indicates whether a column's case matters
// in the designated column.
System.out.println(rsMetaData.isSearchable(i));
// indicates whether values in the designated
// column are signed numbers.
System.out.println(rsMetaData.isSigned(i));
// Gets the designated column's table's catalog name.
System.out.println(rsMetaData.getCatalogName(i));
// Gets the designated column's table's schema name.
System.out.println(rsMetaData.getSchemaName(i));
}
Upvotes: 3
Reputation: 8101
Retrieve the metadata object from your resultset.
ResultSetMetaData rsmd = rs.getMetaData();
rsmd.getColumnType(column);
Upvotes: 2