Actually the ideal interface to be used here is DatabaseMetaData. You can get an object of its type from connection object.
Call method getColumns() on it. You need to pass following values
1.catalog - for Oracle pass null - because Oracle tables are not within a catalog - its a concept like package - for getting parameters of a stored proc, you'd have to pass package name here as you can have stored proc in a package.
2.schema = username value that owns table
3.tableName = exact table name or a pattern like MYTAB% (all tables starting with MYTAB)
4.columnName = if you need only certain columns matching a pattern pas pattern - e.g. COL% - all columns whose names start with COL
if you want all columns pass null or %
This getColumns() method does same thing as your "select COLUMN_NAME, DATA_LENGTH, DATA_TYPE from user_tab_columns" query (internally driver might be calling same). In short this class and its methods like getColumns() are very useful and you should use them as much as you can... http://java.sun.com/j2se/1.3/docs/api/java/sql/DatabaseMetaData.html