更新时间:2025-08-19 GMT+08:00
完整示例
import com.huawei.gaussdb.jdbc.jdbc.PgArray; import com.huawei.gaussdb.jdbc.util.PGobject; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.sql.DriverManager; public class TypesTest { public static Connection getConnection() throws ClassNotFoundException, SQLException { String driver = "com.huawei.gaussdb.jdbc.Driver"; // 指定数据库sourceURL($ip、$port、database根据实际业务进行修改)。 String sourceURL = "jdbc:gaussdb://$ip:$port/database"; // 用户名和密码从环境变量中获取。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Class.forName(driver); return DriverManager.getConnection(sourceURL, userName, password); } public static void main(String[] args) { try { Connection conn = getConnection(); Statement statement = conn.createStatement(); statement.execute("set behavior_compat_options='proc_outparam_override'"); statement.close(); CallableStatement cs = conn.prepareCall("{CALL PUBLIC.TEST_PROC(?,?,?,?)}"); // 设置参数。 PGobject pgObject = new PGobject(); pgObject.setType("public.compfoo"); // 设置复合类型名。 pgObject.setValue("(1,demo)"); // 绑定复合类型值。 cs.setObject(1, pgObject); pgObject = new PGobject(); pgObject.setType("public.compfoo_table"); // 设置Table类型名。 pgObject.setValue("{\"(10,demo10)\",\"(11,demo111)\"}"); // 绑定Table类型值,格式为"{\"(value1,value2)\",\"(value1,value2)\",...}"。 cs.setObject(2, pgObject); // 注册出参。 // 注册out类型的参数,类型为复合类型。 cs.registerOutParameter(3, Types.STRUCT, "public.compfoo"); // 注册out类型的参数,类型为Table类型。 cs.registerOutParameter(4, Types.ARRAY, "public.compfoo_table"); cs.execute(); // 获取输出参数。 // 返回结构是自定义类型。 PGobject result = (PGobject) cs.getObject(3); // 获取out参数。 result.getValue(); // 获取复合类型字符串形式值。 String[] arrayValue = result.getArrayValue(); // 获取复合类型数组形式值,以复合数据类型字段顺序排序。 result.getStruct(); // 获取复合类型子类型名,按创建顺序排序。 result.getAttributes(); // 返回自定义类型每列组成类型的对象,对于array类型和Table类型返回的是PgArray,对于自定义类型,封装的是PGobject,对于其他类型数据存储方式为字符串类型。 for (String s : arrayValue) { System.out.println(s); } PgArray pgArray = (PgArray) cs.getObject(4); ResultSet rs = pgArray.getResultSet(); Object[] array = (Object[]) pgArray.getArray(); for (Object element : array) { System.out.println(element); } cs.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { throw new RuntimeException(e); } } }
回退方法
不涉及
父主题: 操作步骤