#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
pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流