Comments - ResultSetMetaData getColumnClassName accuracy for JDBC

9 years, 1 month ago Tommy Pham

Hi,

Consider this sample DB table [1], I was hoping to extract with the Java code:

Object o = Class.forName(rsmd.getColumnClassName(0)).newInstance();

For most column types (varchar, int, boolean, etc...), I don't see it as a problem. For binary, blob, etc, it's a problem. Please see ResultSetMetaData log dump [2] of each column in the sample table [1].

Regards, Tommy

[1] http://pastebin.com/hgKva9yB

[2] http://pastebin.com/0HbXgBpV

 
9 years, 1 month ago Vladislav Vaintroub

I'm not sure that your use case is aligned with JDBC understanding of what this method should return. There is a test case that checks, among other things that

resutSet.getObject(index).getClass().getName() is the same as resultSetMetaData.getColumnClassName(index)

See here https://github.com/MariaDB/mariadb-connector-j/blob/master/src/test/java/org/mariadb/jdbc/DatatypeTest.java

That in my understanding, was what JDBC required. Why would you need to instantiate Objects with newInstance at all, what are you trying to achieve

 
9 years, 1 month ago Tommy Pham

I'm testing one of my theories. I'll just make adaptation similar to the getClassName [1] and use getColumnType as that seems to be more reliable and the returned type seems to be one of the java.sql.Types.

Thanks, Tommy

[1] https://github.com/MariaDB/mariadb-connector-j/blob/master/src/main/java/org/mariadb/jdbc/internal/mysql/MySQLType.java#L123

 
9 years, 1 month ago Tommy Pham

For the BLOB MariaDB datatype, I was expecting the getColumnClassName to be "java.sql.Blob".

 
9 years, 1 month ago Tommy Pham

or javax.sql.rowset.serial.SerialBlob since java.sql.Blob is just an interface.

 
9 years, 1 month ago Vladislav Vaintroub

Well, the getObject() method for blob fields returns byte array, not javax.sql.rowset.serial.SerialBlob , thus the method returns "[B"

 
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.