1

我想创建一个结构来存储数据库中的数据。

我创建了一个函数

function result = LoadDataFromDB(query, columnNames)

其中 column names 表示列名列表,例如 {'id', 'year', 'name'...}

执行以下查询后

ps=conn.prepareStatement(sql);
rs=ps.executeQuery();

我想填充结构,但还没有弄清楚如何动态访问结构中的字段。

这是应该创建和填充结构的代码片段:

varnamelist = genvarname(columnNames);

result = cell2struct(cell(size(varnamelist(:))), varnamelist(:));
while rs.next()
    count=count+1;
    for i = 1 : length(columnNames)
        fieldname = columnNames(i);
        value = char(rs.getString(i));
          %result(count).columnNames(i)=char(rs.getString(i));
          result(count).(fieldname) = value;
    end
end

主要问题是线路

result(count).(fieldname) = value;

下面描述一个问题是来自控制台输出的副本:

K>> result(1)

ans = 

    a: []
    b: []
    c: []

K>> result(1).('a')

ans =

     []

K>> fieldname

fieldname = 

    'a'

从上面的输出中得出结论,命令 result(1).(fieldname) 应该访问字段 'a' 但尝试一下,它会返回以下错误:

K>> result(1).(fieldname)
??? Argument to dynamic structure reference must evaluate to a valid field name.

有谁知道如何动态地填充结构?

4

1 回答 1

1

是的,有动态字段引用。例如,您可以在此处找到更多信息。

动态引用可用于分配或引用结构中的字段,如下所示:

fieldName = 'some_field';
your_struct.(fieldName) = fieldValue

因此,在您的情况下,这意味着将内部循环体修改为

fieldname = columnNames{i};
value = rs.getString{i};
result(count).(fieldname) = value;
于 2012-08-31T11:32:57.840 回答