{
java.sql.Clob aClob = rs.getClob(columnId);
if (aClob != null && aClob.length() > 0)
{
result =
aClob
.getSubString(1L, (int) aClob.length())
.toCharArray();
}
break;
}
case Types.BLOB :
{
java.sql.Blob aBlob = rs.getBlob(columnId);
if (aBlob != null && aBlob.length() > 0)
{
result = aBlob.getBytes(1L, (int) aBlob.length());
}
break;
}
<column name="ID" required="true" primaryKey="true" type="INTEGER"/>
<column name="BLOB_VALUE_" type="BLOB"/>
<column name="CLOB_VALUE_" type="CLOB"/>
</table>
public void setObjectForStatement(PreparedStatement ps, int index, Object value, int sqlType) throws SQLException
{
if (((sqlType == Types.VARBINARY) ||
(sqlType == Types.LONGVARBINARY) ||
(sqlType == Types.BLOB)) &&
(value instanceof byte[]))
{
byte buf[] = (byte[])value;
ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);
changePreparedStatementResultSetType(ps);
ps.setBinaryStream(index, inputStream, buf.length);
}
else if (sqlType == Types.CLOB)
{
CharArrayReader inputStream = new CharArrayReader((char[]) value);
ps.setCharacterStream(index, inputStream, ((char[])value).length);
}
else if (value instanceof Double)
{
// workaround for the bug in Oracle thin driver
ps.setDouble(index, ((Double) value).doubleValue());
}
else
{
super.setObjectForStatement(ps, index, value, sqlType);
}
}
>
> Attatched is a patch to fix, and a patch to the test case for blobs to
> verify the fix. Unfortunately HSQLDB does not support the blob
> functions, hence this test is commented out of AllTests, and I do not at
> the moment have access to my other db's to run this test. However, it
> should be good.
>
> On Thu, 2002-11-21 at 20:11, Michael Mogley wrote:
> > I've just started experimenting with Ojb and seem to have run across a bug. Specifically, a Clob or Blob field whose value is undefined in the db gives the following stack trace:
> >
> > java.lang.NullPointerException
> > at org.apache.ojb.broker.accesslayer.JdbcAccess.getObjectFromColumn(JdbcAccess.java:592)
> > at org.apache.ojb.broker.accesslayer.JdbcAccess.getObjectFromColumn(JdbcAccess.java:469)
> > at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFrom(RowReaderDefaultImpl.java:141)
> > at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java:385)
> > at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:203)
> > at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1117)
> > at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1239)
> > at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1265)
> > at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1252)
> >
> > Ojb attempts to perform operations on the Blob/Clob before checking to see if the returned value is null.
> >
> > Or am I missing something?
> >
> > Michael
>
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
JdbcAccess.java
Description: Binary data
PlatformOracleImpl.java
Description: Binary data
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE database SYSTEM "http://jakarta.apache.org/turbine/dtd/database.dtd">
<database name="@DATABASE_DEFAULT@" defaultIdMethod="none" baseClass=""> <!-- =================================================== --> <!-- B O O K T A B L E --> <!-- =================================================== --> <!-- <table name=""> <column name="" required="true" primaryKey="true" type="INTEGER"/> <column name="" required="true" type=""/> <foreign-key foreignTable=""> <reference local="" foreign=""/> </foreign-key> </table> --> <table name="Artikel" javaName="Article"> <column name="Artikel_Nr" required="true" primaryKey="true" type="INTEGER" javaName="articleId"/> <column name="Artikelname" type="VARCHAR" size="60" javaName="articleName"/> <column name="Lieferanten_Nr" type="INTEGER" javaName="supplierId"/> <column name="Kategorie_Nr" type="INTEGER" javaName="productGroupId"/> <column name="Liefereinheit" type="VARCHAR" size="30" javaName="unit"/> <column name="Einzelpreis" type="FLOAT" javaName="price"/> <column name="Lagerbestand" type="INTEGER" javaName="stock"/> <column name="BestellteEinheiten" type="INTEGER" javaName="orderedUnits"/> <column name="MindestBestand" type="INTEGER" javaName="minimumStock"/> <column name="Auslaufartikel" type="INTEGER" javaName="inSelloutArticle"/> </table> <table name="BOOKS"> <column name="Artikel_Nr" required="true" primaryKey="true" type="INTEGER"/> <column name="Artikelname" type="VARCHAR" size="60"/> <column name="Lieferanten_Nr" type="INTEGER"/> <column name="Kategorie_Nr" type="INTEGER"/> <column name="Liefereinheit" type="VARCHAR" size="30"/> <column name="Einzelpreis" type="FLOAT"/> <column name="Lagerbestand" type="INTEGER"/> <column name="BestellteEinheiten" type="INTEGER"/> <column name="MindestBestand" type="INTEGER"/> <column name="Auslaufartikel" type="INTEGER"/> <column name="ISBN" type="CHAR" size="10"/> <column name="AUTHOR" type="VARCHAR" size="50"/> </table> <table name="CDS"> <column name="Artikel_Nr" required="true" primaryKey="true" type="INTEGER"/> <column name="Artikelname" type="VARCHAR" size="60"/> <column name="Lieferanten_Nr" type="INTEGER"/> <column name="Kategorie_Nr" type="INTEGER"/> <column name="Liefereinheit" type="VARCHAR" size="30"/> <column name="Einzelpreis" type="FLOAT"/> <column name="Lagerbestand" type="INTEGER"/> <column name="BestellteEinheiten" type="INTEGER"/> <column name="MindestBestand" type="INTEGER"/> <column name="Auslaufartikel" type="INTEGER"/> <column name="LABEL" type="VARCHAR" size="50"/> <column name="MUSICIANS" type="VARCHAR" size="250"/> </table> <table name="Kategorien" javaName="ProductGroup"> <column name="Kategorie_Nr" required="true" primaryKey="true" type="INTEGER" javaName="groupId"/> <column name="KategorieName" type="VARCHAR" size="20" javaName="groupName"/> <column name="Beschreibung" type="VARCHAR" size="60" javaName="description"/> </table> <table name="ORDER_POSITION"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="ORDER_ID" type="INTEGER"/> <column name="ARTICLE_ID" type="INTEGER"/> </table> <table name="TREE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="DATA" type="VARCHAR" size="50"/> <column name="PARENT_ID" type="INTEGER"/> </table> <table name="TREEGROUP"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="DATA" type="VARCHAR" size="50"/> <column name="PARENT_ID" type="INTEGER"/> <column name="GROUP_ID" type="INTEGER"/> </table> <table name="AB_TABLE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="CLASS_NAME" type="VARCHAR" size="60"/> <column name="VALUE_" type="INTEGER"/> </table> <!-- Product Table for Tutorial 1, 2 & 4--> <table name="PRODUCT"> <column name="ID" required="true" primaryKey="true" type="INTEGER" javaName="_id"/> <column name="NAME" type="VARCHAR" size="100"/> <column name="PRICE" type="FLOAT"/> <column name="STOCK" type="INTEGER"/> </table> <table name="PERSON"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="FIRSTNAME" type="VARCHAR" size="50"/> <column name="LASTNAME" type="VARCHAR" size="50"/> </table> <table name="PROJECT"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="TITLE" type="VARCHAR" size="50"/> <column name="DESCRIPTION" type="VARCHAR" size="250"/> </table> <table name="PERSON_PROJECT"> <column name="PERSON_ID" required="true" primaryKey="true" type="INTEGER"/> <column name="PROJECT_ID" required="true" primaryKey="true" type="INTEGER"/> <column name="ROLENAME" type="VARCHAR" size="20"/> </table> <table name="TASK"> <column name="TASK_ID" required="true" primaryKey="true" type="INTEGER"/> <column name="PERSON_ID" required="true" type="INTEGER"/> <column name="PROJECT_ID" required="true" type="INTEGER"/> <column name="TASKNAME" type="VARCHAR" size="20"/> <foreign-key foreignTable="PERSON_PROJECT"> <reference local="PERSON_ID" foreign="PERSON_ID"/> <reference local="PROJECT_ID" foreign="PROJECT_ID"/> </foreign-key> </table> <table name="FAMILY_MEMBER"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="FIRSTNAME" type="VARCHAR" size="50"/> <column name="LASTNAME" type="VARCHAR" size="50"/> <column name="MOTHER_ID" type="INTEGER"/> <column name="FATHER_ID" type="INTEGER"/> </table> <table name="LOCKED_BY_VERSION"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="VALUE_" type="VARCHAR" size="60"/> <column name="VERSION_" type="INTEGER"/> </table> <table name="LOCKED_BY_TIMESTAMP"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="VALUE_" type="VARCHAR" size="60"/> <column name="TIMESTAMP_" type="TIMESTAMP"/> </table> <table name="BLOB_TEST"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="BLOB_VALUE_" type="BLOB"/> <column name="CLOB_VALUE_" type="CLOB"/> </table> <table name="MDTEST_MASTER"> <column name="MASTERID" required="true" primaryKey="true" type="INTEGER"/> <column name="MASTER_TEXT" type="VARCHAR" size="255"/> </table> <table name="MDTEST_DETAIL_FKINPK"> <column name="MASTERID" required="true" primaryKey="true" type="INTEGER"/> <column name="DETAILID" required="true" primaryKey="true" type="INTEGER"/> <column name="DETAIL_TEXT" type="VARCHAR" size="255"/> <foreign-key foreignTable="MDTEST_MASTER"> <reference local="MASTERID" foreign="MASTERID"/> </foreign-key> </table> <table name="MDTEST_DETAIL_FKNOPK"> <column name="DETAILID" required="true" primaryKey="true" type="INTEGER"/> <column name="MASTERID" required="true" type="INTEGER"/> <column name="DETAIL_TEXT" type="VARCHAR" size="255"/> <foreign-key foreignTable="MDTEST_MASTER"> <reference local="MASTERID" foreign="MASTERID"/> </foreign-key> </table> <table name="POINT_TABLE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="X" required="true" type="INTEGER"/> <column name="Y" required="true" type="INTEGER"/> </table> <table name="GRAPH_NODE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="NAME" required="true" type="VARCHAR" size="50"/> <column name="LOCATION" type="INTEGER"/> </table> <table name="GRAPH_EDGE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="SOURCE" required="true" type="INTEGER"/> <column name="SINK" required="true" type="INTEGER"/> </table> <table name="TestClassA"> <column name="id" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="value1" required="false" type="VARCHAR" size="64"/> <column name="value2" required="false" type="VARCHAR" size="64"/> <column name="value3" required="true" type="INTEGER" /> <column name="bOid" required="false" type="VARCHAR" size="48"/> </table> <table name="TestClassB"> <column name="id" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="value1" required="false" type="VARCHAR" size="64"/> <column name="aOid" required="false" type="VARCHAR" size="48"/> </table> <table name="RelatedToContract"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="relatedValue1" required="false" type="VARCHAR" size="64"/> <column name="relatedValue2" required="false" type="INTEGER"/> <column name="relatedValue3" required="false" type="TIMESTAMP"/> </table> <table name="Contract"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="fk_to_related" required="false" type="VARCHAR" size="48"/> <column name="contract_value1" required="false" type="VARCHAR" size="64"/> <column name="contract_value2" required="false" type="INTEGER"/> <column name="contract_value3" required="false" type="VARCHAR" size="64"/> <column name="contract_value4" required="false" type="TIMESTAMP"/> <foreign-key foreignTable="RelatedToContract"> <reference local="fk_to_related" foreign="pk"/> </foreign-key> </table> <table name="Version"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="fk_to_contract" required="true" type="VARCHAR" size="48"/> <column name="version_value1" required="false" type="VARCHAR" size="64"/> <column name="version_value2" required="false" type="INTEGER"/> <column name="version_value3" required="false" type="TIMESTAMP"/> <foreign-key foreignTable="Contract"> <reference local="fk_to_contract" foreign="pk"/> </foreign-key> </table> <table name="Effectiveness"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="fk_to_version" required="true" type="VARCHAR" size="48"/> <column name="eff_value1" required="false" type="VARCHAR" size="64"/> <column name="eff_value2" required="false" type="INTEGER"/> <column name="eff_value3" required="false" type="TIMESTAMP"/> <foreign-key foreignTable="Version"> <reference local="fk_to_version" foreign="pk"/> </foreign-key> </table> <table name="MultiMappedTable"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="value1" required="false" type="VARCHAR" size="64"/> <column name="value2" required="false" type="INTEGER"/> <column name="value3" required="false" type="TIMESTAMP"/> <column name="value4" required="false" type="VARCHAR" size="64"/> <column name="value5" required="false" type="INTEGER"/> <column name="value6" required="false" type="TIMESTAMP"/> <column name="value7" required="false" type="VARCHAR" size="64"/> <column name="ojbConcreteClass" required="true" type="VARCHAR" size="64"/> </table> <table name="TABLE_1"> <column name="pk" required="true" primaryKey="true" type="INTEGER"/> <column name="fk_to_related" required="false" type="INTEGER"/> <foreign-key foreignTable="TABLE_2"> <reference local="fk_to_related" foreign="pk"/> </foreign-key> </table> <table name="TABLE_2"> <column name="pk" required="true" primaryKey="true" type="INTEGER"/> </table> <table name="BIDIR_A"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="fk_to_B" required="false" type="VARCHAR" size="48"/> <foreign-key foreignTable="BIDIR_B"> <reference local="fk_to_B" foreign="pk"/> </foreign-key> </table> <table name="BIDIR_B"> <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/> <column name="fk_to_A" required="false" type="VARCHAR" size="48"/> <foreign-key foreignTable="BIDIR_A"> <reference local="fk_to_A" foreign="pk"/> </foreign-key> </table> <table name="MAMMAL"> <column name="animalId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> <column name="age" type="INTEGER"/> <column name="numLegs" type="INTEGER"/> <column name="zooId" type="INTEGER"/> </table> <table name="REPTILE"> <column name="animalId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> <column name="age" type="INTEGER"/> <column name="color" type="VARCHAR" size="60"/> <column name="zooId" type="INTEGER"/> </table> <table name="ZOO"> <column name="zooId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="FISH"> <column name="foodId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> <column name="calories" type="INTEGER"/> <column name="typeOfWater" type="VARCHAR" size="60"/> </table> <table name="SALAD"> <column name="foodId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> <column name="calories" type="INTEGER"/> <column name="color" type="VARCHAR" size="60"/> </table> <table name="GOURMET"> <column name="gourmetId" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="GOURMET_FOOD"> <column name="GOURMET_ID" required="true" primaryKey="true" type="INTEGER"/> <column name="FOOD_ID" required="true" primaryKey="true" type="INTEGER"/> </table> <table name="GUIDTEST"> <column name="GUID" required="true" primaryKey="true" type="VARCHAR" size="60"/> <column name="GUIDVALUE" type="VARCHAR" size="60"/> </table> <table name="CONV_REFERER" javaName="ConversionReferrer"> <column name="PK1" required="true" primaryKey="true" type="INTEGER"/> <column name="REF1" type="INTEGER"/> </table> <table name="CONV_REFERED" javaName="ConversionReferred"> <column name="PK1" required="true" primaryKey="true" type="INTEGER"/> </table> <table name="SITE"> <column name="ID" required="true" primaryKey="true" type="INTEGER"/> <column name="NAME" required="true" type="VARCHAR" size="100"/> <column name="SITEYEAR" type="INTEGER"/> <column name="SEMESTER" type="INTEGER"/> <unique name="NAME_UNIQUE"> <unique-column name="NAME"/> </unique> </table> <!-- =================================================== --> <!-- Sequence mangager test tables --> <!-- =================================================== --> <table name="SM_TAB_A"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="SM_TAB_AA"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="SM_TAB_AAA"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="SM_TAB_B"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="SM_TAB_BB"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> <table name="SM_SAME_TAB"> <column name="id" required="true" primaryKey="true" type="INTEGER"/> <column name="name" type="VARCHAR" size="60"/> </table> </database>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>