diff --git a/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java b/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java
index 0f1d3c7..e37f3a1 100644
--- a/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java
+++ b/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java
@@ -17,49 +17,31 @@
 
 package javax.sql.rowset;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.sql.SQLException;
 import java.sql.Types;
 import org.apache.harmony.sql.internal.nls.Messages;
 
 class SqlUtil {
-    /*
-     * FIXME:Validate column types is defined by java.sql.Types, current
-     * implementation is ugly, need to find an elegant and effient way to check
-     * all constants defined in java.util.sql.Types
-     */
+
     static void validateType(int type) throws SQLException {
-        switch (type) {
-        case Types.ARRAY:
-        case Types.BIGINT:
-        case Types.BINARY:
-        case Types.BIT:
-        case Types.BLOB:
-        case Types.BOOLEAN:
-        case Types.CHAR:
-        case Types.CLOB:
-        case Types.DATALINK:
-        case Types.DATE:
-        case Types.DECIMAL:
-        case Types.DISTINCT:
-        case Types.DOUBLE:
-        case Types.FLOAT:
-        case Types.INTEGER:
-        case Types.JAVA_OBJECT:
-        case Types.LONGVARBINARY:
-        case Types.LONGVARCHAR:
-        case Types.NULL:
-        case Types.NUMERIC:
-        case Types.OTHER:
-        case Types.REAL:
-        case Types.REF:
-        case Types.SMALLINT:
-        case Types.STRUCT:
-        case Types.TIME:
-        case Types.TIMESTAMP:
-        case Types.TINYINT:
-        case Types.VARBINARY:
-        case Types.VARCHAR:
-            return;
+        try {
+            int modifiers = -1;
+            Field[] fields = Types.class.getFields();
+            for (int index = 0; index < fields.length; index++) {
+                if (int.class == fields[index].getType()) {
+                    modifiers = fields[index].getModifiers();
+                    if (Modifier.isStatic(modifiers)
+                            && Modifier.isFinal(modifiers)) {
+                        if (type == fields[index].getInt(Types.class)) {
+                            return;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // ignored: this should never happen
         }
         throw new SQLException(Messages.getString("sql.28")); //$NON-NLS-1$
     }
diff --git a/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java b/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java
index a3c328f..6293441 100644
--- a/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java
+++ b/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java
@@ -826,6 +826,11 @@
         } catch (SQLException e) {
             // expected
         }
+        
+        // types compliant to JDBC4
+        metaDataImpl.setColumnType(2, Types.NCHAR);
+        metaDataImpl.setColumnType(2, Types.NCLOB);
+        metaDataImpl.setColumnType(2, Types.NVARCHAR);
     }
 
     /**
