#java.sql.Struct
# 描述
Struct用来表示数据库中的UDT Object类型的数据。
java.sql.Struct是JDBC规范中用于映射数据库结构化类型(SQL STRUCT类型)的核心接口,它是数据库结构化类型在Java程序中的直接映射对象,数据库中的STRUCT类型(本质是一组命名字段的集合,比如包含id、name、age的结构化数据),通过JDBC查询后会被封装为Struct实例,开发者可通过该接口的方法获取结构化类型的名称、字段值数组,实现对数据库结构化数据的读取和操作。
详细接口说明请参考JDBC官方网站 (opens new window)。
# 方法
java.sql.Struct包含的方法如下:
| 方法 | 返回类型 | 备注 |
|---|---|---|
| getSQLTypeName() | String | 返回UDT类型全称。 |
| getAttributes() | Object[] | 返回UDT类型数据的Object[]对象。 |
| getAttributes(Map<String, Class<?>> map) | Object[] | 添加UDT映射SQLData对象集合,返回对应的SQLData对象。 |
# 示例
package quickstart;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Struct;
import java.util.Properties;
public class StructExample {
public static Connection getConnection() throws SQLException, ClassNotFoundException {
String url = "jdbc:yasdb://192.168.1.2:1688/yasdb";
Properties info = new Properties();
info.setProperty("user", "username");
info.setProperty("password", "passwd");
Class.forName("com.yashandb.jdbc.Driver");
return DriverManager.getConnection(url, info);
}
public void readStructData(Connection conn) throws SQLException {
try (Statement stmt = conn.createStatement()) {
try (ResultSet resultSet = stmt.executeQuery("SELECT * FROM udt_tab")) {
while (resultSet.next()) {
Struct struct = (Struct) resultSet.getObject(1);
String udtName = struct.getSQLTypeName();
Object[] attrs = struct.getAttributes();
System.out.println("UDT Type: " + udtName + ", Attributes: " + attrs.length);
}
}
}
}
public static void main(String[] args) {
try (Connection conn = getConnection()) {
try (Statement statement = conn.createStatement()) {
statement.execute("CREATE OR REPLACE TYPE employee_type AS OBJECT (employee_id INT, name VARCHAR(20))");
}
Struct struct = conn.createStruct("EMPLOYEE_TYPE", new Object[]{1, "Alice"});
System.out.println("UDT Type: " + struct.getSQLTypeName() + ", Attributes: " + struct.getAttributes().length);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
正常情况下,程序输出如下:
UDT Type: USERNAME.EMPLOYEE_TYPE, Attributes: 2

