更新时间:2025-09-04 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);
}
}
}
回退方法
不涉及
父主题: 操作步骤