order_date DATE, customer_num INTEGER, backlog CHAR(1), po_num CHAR(10), paid_date DATE, sales_rep INT8 ); EXEC SQL insert into order2 (order_number, sales_rep) values (0, :rep_num); if (SQLCODE == 0) { ifx_getserial8(order_num); if (ifx_int8toasc(ℴ_num, str, 20) == 0) printf("New order number is %s\n", str); }
尽管您最可能使用 GBase 8s 扩展类在不透明类型上下文之外的数据库服务器上创建大对 象,但是智能大对象仍可以是不透明类型中的数据成员, 有关智能大对象的更多信息,请参阅智能大对象数据类型。 在不透明类型中大对象存储在 IfxLocator 对象中; 在内部定义不透明类型的 C 结构中, 大 对象通过 MI_LO_HANDLE 类型的定位指针引用。该对象使用 IfxSmartBlob 类提供的方 法创建,并且从这些方法获得的大对象句柄成为不透明类型中的数据成员。BLOB 和 CLOB 对象都使用相同的大对象句柄,如下例所示: import java.sql.*; import com.gbasedbt.jdbc.*; /* * C struct of large_bin_udt: * * typedef struct LARGE_BIN_TYPE * { * MI_LO_HANDLE lb_handle; // handle to large object (72 bytes) * } * large_bin_udt; * */ public class largebinUDT implements SQLData { private String sql_type = "large_bin_udt"; public Clob lb_handle;
public largebinUDT() { }
public largebinUDT(Clob clob) { lb_handle = clob; }
public String getSQLTypeName() {
GBase 8s JDBC Driver 程序员指南 南大通用数据技术股份有限公司 - 195 - 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; lb_handle = stream.readClob(); } // writes a sequence of values from a Java object to a stream public void writeSQL(SQLOutput stream) throws SQLException { stream.writeClob(lb_handle); } } 在 JDBC 应用程序中,使用 IfxSmartBlob 类提供的方法创建 MI_LO_HANDLE 对象: String s = "insert into largebin_tab (int_col, largebin_col, lvc_col) " + "values (?,?,?)"; System.out.println(s); pstmt = conn.prepareStatement(s);
... // create a large object using IfxSmartBlob's methods String filename = "lbin_in1.dat"; File file = new File(filename); int fileLength = (int) file.length(); FileInputStream fin = new FileInputStream(file);
IfxLobDescriptor loDesc = new IfxLobDescriptor(conn); System.out.println("create large object descriptor...ok");
IfxLocator loPtr = new IfxLocator(); IfxSmartBlob smb = new IfxSmartBlob((IfxConnection)conn); int loFd = smb.IfxLoCreate(loDesc, 8, loPtr); System.out.println("create large object...ok");
int n = smb.IfxLoWrite(loFd, fin, fileLength);
GBase 8s JDBC Driver 程序员指南 南大通用数据技术股份有限公司 - 196 - System.out.println("write file content into large object...ok");
// initialize largebin object using the large object created // above, before doing setObject for the large_bin_udt column. largebinUDT largebinObj = new largebinUDT(); largebinObj.lb_handle = new IfxCblob(loPtr); pstmt.setObject(2, largebinObj); System.out.println("setObject(largebinUDT)...ok");
// close/release large object smb.IfxLoClose(loFd); System.out.println("close large object...ok"); smb.IfxLoRelease(loPtr); System.out.println("release large object...ok"); 有关详细信息,请参阅智能大对象数据类型。