Klausos Klausos
Klausos Klausos

Reputation: 16050

How to define column type when loading data from MySQL DB into Java application?

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

Answers (2)

Aleks G
Aleks G

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

Shashank Kadne
Shashank Kadne

Reputation: 8101

Retrieve the metadata object from your resultset.

ResultSetMetaData rsmd = rs.getMetaData();
rsmd.getColumnType(column);

Upvotes: 2

Related Questions