Class definition
The class for the C opaque type, charattrUDT in
the following example, must implement the SQLData interface:
import java.sql.*;
import com.informix.jdbc.*;
/*
* C struct of charattr_udt:
*
* typedef struct charattr_type
* {
* char chr1[4+1];
* mi_boolean bold; // mi_boolean (1 byte)
* mi_smallint fontsize; // mi_smallint (2 bytes)
* }
* charattr;
*
* typedef charattr charattr_udt;
*
*/
public class charattrUDT implements SQLData
{
private String sql_type = "charattr_udt";
// an ASCII character/a multibyte character, and is null-terminated.
public String chr1;
// Is the character in boldface?
public boolean bold;
// font size of the character
public short fontsize;
public charattrUDT() { }
public charattrUDT(String chr1, boolean bold, short fontsize)
{
this.chr1 = chr1;
this.bold = bold;
this.fontsize = fontsize;
}
public String getSQLTypeName()
{
return sql_type;
}
// reads a stream of data values and builds a Java object
public void readSQL(SQLInput stream, String type) throws SQLException
{
sql_type = type;
chr1 = ((IfmxUDTSQLInput)stream).readString(5);
bold = stream.readBoolean();
fontsize = stream.readShort();
}
// writes a sequence of values from a Java object to a stream
public void writeSQL(SQLOutput stream) throws SQLException
{
((IfmxUDTSQLOutput)stream).writeString(chr1, 5);
stream.writeBoolean(bold);
stream.writeShort(fontsize);
}
// overides Object.equals()
public boolean equals(Object b)
{
return (chr1.equals(((charattrUDT)b).chr1) &&
bold == ((charattrUDT)b).bold &&
fontsize == ((charattrUDT)b).fontsize);
}
public String toString()
{
return "chr1=" + chr1 + " bold=" + bold + " fontsize=" + fontsize;
}
}
In your JDBC application, a custom type map must map the
SQL-type name charattr_udt to the charattrUDT class:
java.util.Map customtypemap = conn.getTypeMap();
if (customtypemap == null)
{
System.out.println("\n***ERROR: typemap is null!");
return;
}
customtypemap.put("charattr_udt", Class.forName("charattrUDT"));