Create an opaque type without an existing Java class
In this example, the Java™ class MyCircle on
the client is used to create a fixed-length opaque type in the database
server named ACircle. The ACircle opaque type uses the
default support functions provided by the database server:
import java.sql.*; public class MyCircle { String dbname = "test"; String url = null; Connection conn = null; public static void main (String args[]) { new MyCircle(args); } MyCircle(String args[]) { System.out.println("----------------"); System.out.println("- Start - Demo 3"); System.out.println("----------------"); // ----------- // Getting URL // ----------- if (args.length == 0) { System.out.println("\n***ERROR: connection URL must be provided " + "in order to run the demo!"); return; } url = args[0]; // -------------- // Loading driver // -------------- try { System.out.print("Loading JDBC driver..."); Class.forName("com.informix.jdbc.IfxDriver"); System.out.println("ok"); } catch (java.lang.ClassNotFoundException e) { System.out.println("\n***ERROR: " + e.getMessage()); e.printStackTrace(); return; } // ------------------ // Getting connection // ------------------ try { System.out.print("Getting connection..."); conn = DriverManager.getConnection(url); System.out.println("ok"); } catch (SQLException e) { System.out.println("URL = '" + url + "'"); System.out.println("\n***ERROR: " + e.getMessage()); e.printStackTrace(); return; } // ------------------- // Setup UDT meta data // ------------------- UDTMetaData mdata = null; try { mdata = new UDTMetaData(); System.out.print("Setting fields in mdata..."); mdata.setSQLName("acircle"); mdata.setLength(24); mdata.setFieldCount(3); mdata.setFieldName(1, "x"); mdata.setFieldName(2, "y"); mdata.setFieldName(3, "radius"); mdata.setFieldType(1, com.informix.lang.IfxTypes.IFX_TYPE_INT); mdata.setFieldType(2, com.informix.lang.IfxTypes.IFX_TYPE_INT); mdata.setFieldType(3, com.informix.lang.IfxTypes.IFX_TYPE_INT); // set class name if don't want to use the default name // <udtsqlname>.class mdata.setClassName("ACircle"); mdata.setJarFileSQLName("ACircleJar"); mdata.keepJavaFile(true); System.out.println("ok"); } catch (SQLException e) { System.out.println("***ERROR: " + e.getMessage()); return; } // -------------------------------------------------------- // create java file for UDT and install UDT in the database // -------------------------------------------------------- UDTManager udtmgr = null; try { udtmgr = new UDTManager(conn); System.out.println("Creating .class/.java files - " + "createUDTClass()"); String classname = udtmgr.createUDTClass(mdata); // generated //java file is kept System.out.println(" classname = " + classname); System.out.println("\nCreating .jar file - createJar()"); String jarfilename = udtmgr.createJar(mdata, new String[]{"ACircle.class"}); // jarfilename is // <udtsqlname>.jar // ie. acircle.jar System.out.println("\nsetJarTmpPath()"); udtmgr.setJarTmpPath("/tmp"); System.out.print("\ncreateUDT()..."); udtmgr.createUDT(mdata, "/vobs/jdbc/demo/tools/udtudrmgr/" + jarfilename, "ACircle", 0); System.out.println("ok"); } catch (SQLException e) { System.out.println("\n***ERROR: " + e.getMessage()); return; } System.out.println(); // --------------- // Now use the UDT // --------------- try { String s = "drop table tab"; System.out.print(s + "..."); Statement stmt = conn.createStatement(); int count = stmt.executeUpdate(s); stmt.close(); System.out.println("ok"); } catch ( SQLException e) { // -206 The specified table (%s) is not in the database. if (e.getErrorCode() != -206) { System.out.println("\n***ERROR: " + e.getMessage()); return; } System.out.println("ok"); } executeUpdate("create table tab (c acircle)"); // test DEFAULT Input function executeUpdate("insert into tab values ('10 10 10')"); // test DEFAULT Output function try { String s = "select c::lvarchar from tab"; System.out.println(s); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(s); if (rs.next()) { String c = rs.getString(1); System.out.println(" acircle = '" + c + "'"); } rs.close(); stmt.close(); } catch (SQLException e) { System.out.println("***ERROR: " + e.getMessage()); } System.out.println(); executeUpdate("drop table tab"); // ------------------ // Closing connection // ------------------ try { System.out.print("Closing connection..."); conn.close(); System.out.println("ok"); } catch (SQLException e) { System.out.println("\n***ERROR: " + e.getMessage()); } System.out.println("------------------"); System.out.println("- End - UDT Demo 3"); System.out.println("------------------"); }