Thomas Dudziak wrote:
seems to be ok according to the Clob javadocs
(http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Clob.html#getSubString(long,%20int)),
right ? A string is only returned (and getSubString called) if the
length of the clob is within int range, so length() seems to return a
value <= 0 ?
The problem was just that ddlutils was not handling the case where the
lob length was 0, but it was not null (an empty string was in the CLOB
column)
The hack of a patch below got me going.
Thanks so, so, much to DdlUtils and to Jean for the great tutorial to
get me going in a hurry.
I used DdlUtils to migrate data when trying to recover a database for a
user that had a corrupted database today.
(some business about removing a pesky db.lck file that wouldn't let them
boot their database).
All the user's backups were corrupt and we don't have import/export
for lobs yet (DERBY-378),
so I was completely stuck until I found DdlUtils which I found easy to
use and really saved my day.
Index: src/java/org/apache/ddlutils/platform/PlatformImplBase.java
===================================================================
--- src/java/org/apache/ddlutils/platform/PlatformImplBase.java
(revision 414353)
+++ src/java/org/apache/ddlutils/platform/PlatformImplBase.java (working
copy)
@@ -1956,6 +1956,10 @@
{
value = clob;
}
+ else if (clob.length() == 0)
+ {
+ value = "";
+ }
else
{
value = clob.getSubString(1l,
(int)clob.length());
@@ -1968,6 +1972,10 @@
{
value = blob;
}
+ else if (blob.length() == 0)
+ {
+ value = "";
+ }
else
{
value = blob.getBytes(1l, (int)blob.length());