データベースからのデータを格納するための構造を作成したいと思います。
関数を作成しました
function result = LoadDataFromDB(query, columnNames)
ここで、列名は列名のリストを表します。たとえば、{'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.
構造を動的に埋める方法を知っている人はいますか?