Bug #8868 | Formatted columns returning strange column type | ||
---|---|---|---|
Submitted: | 1 Mar 2005 15:52 | Modified: | 17 May 2005 16:41 |
Reporter: | Gary McMeekin | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 3.1.7 | OS: | Linux (Linux FC3) |
Assigned to: | Sergei Golubchik | CPU Architecture: | Any |
[1 Mar 2005 15:52]
Gary McMeekin
[16 Mar 2005 7:27]
R Fields
We are also having this exact problem. We just recently upgraded to the 3.1 series of Connector/J, and all of our database queries that used DATE_FORMAT are now broken.
[16 Mar 2005 14:31]
Mark Matthews
This is fixed for 3.1.8, available now in nightly snapshots from http://downloads.mysql.com/snapshots.php
[16 Mar 2005 22:14]
R Fields
Hello, We are getting mixed results for this bug fix (we are using mysql-connector-java-3.1-nightly-20050316-bin.jar). In some snippets of code, it now appears to be working, and we are getting a String back. In others, we continue to get the blob. The following snippet of code (that we use to map the results into a Vector of Hashtables) continues to have the problem: public static Vector createResultsVector(ResultSet rs) throws DBException { try { Vector resultVector = new Vector(); ResultSetMetaData meta = rs.getMetaData(); while (rs.next()) { Hashtable currentRow = new Hashtable(); for (int i = 1; i <= meta.getColumnCount(); i++) { Object data = rs.getObject(i); // let's print this out to see what we're getting here System.out.println(meta.getColumnName(i) + "-" + data.getClass().getName()); if (data != null) { currentRow.put(meta.getColumnName(i), data); } } resultVector.addElement(currentRow); } return resultVector; } catch (SQLException e) { cat.error("DB.createResultsVector failed: " + e.getMessage()); } } Thank you, -Richard
[16 Mar 2005 22:21]
Mark Matthews
Richard, without seeing the query and the DDL of the table(s) involved, this code snippet isn't much help for resolving the issue. This is really unfortunately a server bug that the driver has to work-around, so not all cases are currently caught. -Mark
[16 Mar 2005 23:42]
R Fields
Created bug 9236 so that I could upload the table dump that demonstrates the bug.
[17 May 2005 9:29]
Sergei Golubchik
no bug in the server here, DATE_FORMAT in 4.1 returns a binary string.
[5 Jan 2006 7:15]
tom quas
I'm running into the exact same misbehavior with mysql-connector-java-3.1.12 on MySQL server version: 4.1.7-standard-log on SUSE 9.1 JDK 1.4.2_09 commons-beanutils 1.6 My query: select username, MAX(last_startphp) as portal, MAX(last_deep) as deep, MAX(last_cam) as cam from user_logins group by username having username = ? on a table with the following structure: CREATE TABLE `user_logins` ( `id` bigint(20) NOT NULL auto_increment, `username` varchar(50) character set latin1 collate latin1_general_ci NOT NULL default '', `last_startphp` datetime default NULL, `last_deep` datetime default NULL, `last_cam` datetime default NULL, PRIMARY KEY (`id`), KEY `username_idx` (`username`), KEY `last_startphp_idx` (`last_startphp`), KEY `last_deep_idx` (`last_deep`), KEY `last_cam_idx` (`last_cam`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci The Java code: protected static DynaBean[] createResult( ResultSet rs ) throws Exception { List results = new ArrayList(); ResultSetDynaClass rsdc = new ResultSetDynaClass( rs ); BasicDynaClass bdc = new BasicDynaClass( "result", BasicDynaBean.class, rsdc.getDynaProperties() ); Iterator rows = rsdc.iterator(); while ( rows.hasNext() ) { DynaBean oldRow = (DynaBean)rows.next(); DynaBean newRow = bdc.newInstance(); PropertyUtils.copyProperties( newRow, oldRow ); results.add( newRow ); } return (DynaBean[])convertToArray( results, DynaBean.class ); static Object[] convertToArray(Collection coll, Class compontentType) { Object[] array = (Object[])Array.newInstance(compontentType, coll .size()); return coll.toArray(array); } Is there a quick way to get around this problem?