+1 for applying the patch. I have the same problem here. I had to remove all blob-related columns from my XML DB schema, so that those columns get ignored (but this is not a good solution either! ;-)
-- Mat -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of Daniel Rall Sent: March 29, 2002 2:53 AM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: Oracle CLOBs "Davide Baroncelli" <[EMAIL PROTECTED]> writes: >> Is there a way to use the village api to select CLOBs from an Oracle DB? >> When I try I get a.... >> java.lang.NumberFormatException: 4294967295 > Oddily, I ran into this problem too, today. This was using torque, and > trying to use a table with a column of BLOB type on an Oracle 8i DB. This > doesn't happen to be a Village or Oracle-related problem, but a JDK related > one. The problem is that ResultSetMetaData interface has an int return value > for the getPrecision() method, which is not large enough to store the value > returned by oracle when the class asks the driver the precision of the > column. There are various messages on the OTN reporting that, and you can > vote this bug in the java developer connection if you want the thing solved: > http://developer.java.sun.com/developer/bugParade/bugs/4625851.html > Village fails to do what is supposed to do, because it doesn't wrap the call > to > this.precision = rsmd.getPrecision (columnNumber); > in a try-catch in the Column.populate() method. I know this is ugly, but in > order to gain robustness towards database independence I think the call > should be changed to > > try { > this.precision = rsmd.getPrecision (columnNumber); > } > catch ( NumberFormatException nfe ) { > // This may happen if the precision is too large for an int > // see bug #4625851 in the JDC > (http://developer.java.sun.com/developer/bugParade/bugs/4625851.html) > this.precision = Integer.MAX_VALUE; > } > > But except this problem, I see a greater problem, with blobs and clobs: > Village seems to treat them in a non particular way, trying to set them to > database columns as setString! This won't work in Oracle as, as far as I > know, one has to use Streaming to write into blob columns. See > http://download-uk.oracle.com/otndoc/oracle9i/901_doc/java.901/a90211/oralob > .htm#1000888 for reference. In fact, trying to set in a blob column a 128 Kb > image causes oracle to report an error, saying the passed data is too large. > > In the meanwhile, you can maybe use LONG instead of CLOB: they use up to 2Gb > instead of 4 and the return value does not cause the Integer.parseInt to > explode. Davide, I totally I agree. I've hit this problem myself. Since it will be a while before Sun fixes this bug and rolls out a new version, I recommend integration of the following patch: Index: Column.java =================================================================== RCS file: /home/cvspublic/village/com/workingdogs/village/Column.java,v retrieving revision 1.8 diff -u -u -r1.8 Column.java --- Column.java 2001/09/10 20:35:32 1.8 +++ Column.java 2002/03/29 07:51:19 @@ -151,7 +151,17 @@ this.readOnly = rsmd.isReadOnly (columnNumber); this.searchable = rsmd.isSearchable (columnNumber); this.scale = rsmd.getScale (columnNumber); - this.precision = rsmd.getPrecision (columnNumber); + try + { + this.precision = rsmd.getPrecision (columnNumber); + } + catch (NumberFormatException assumedTooLarge) + { + // This may happen if the precision is too large for an + // int, with column types such as MySQL BIGINT, Oracle + // BLOB, etc.. See bug #4625851 at the JDC for details. + this.precision = Integer.MAX_VALUE; + } this.length = rsmd.getColumnDisplaySize (columnNumber); } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
