gpt4 book ai didi

matlab - 在MATLAB中具有可变数量参数的SQLite语句

转载 作者:行者123 更新时间:2023-12-03 18:12:03 24 4
gpt4 key购买 nike

我正在MATLAB中编写GUI并使用mksqlite。我在将参数传递给它时遇到问题。

命令为mksqlite([ 'INSERT INTO ' , z , ' VALUES (?)' ], data);,其中:


从列表框中选择z = 'table name''table name'
要插入的data来自inputdlg


问题在于?参数,因为不同的表具有不同的列数。有人知道一种动态声明?的方法吗?

a = get(handles.listbox1,'String');
b = get(handles.listbox1,'Value');
tabela=a{b};
disp(tabela);
mksqlite( 'param_wrapping', 1 );
mksqlite( 'result_type', 1 );
[results,colnames] = mksqlite(['SELECT * FROM ', tabela])
disp(results);
e=fieldnames(results);
v=size(e);
for r=1:v
prompt={'Wprowadź '};
dlg_title = 'Wprowadź ';
num_lines = 1;
answer = inputdlg(prompt,dlg_title,num_lines);
imie=answer{1};
disp(imie);
t=answer{1};
data{r}=t;
disp(data);
z=a{b};
end;

mksqlite([ 'INSERT INTO ' , z , ' VALUES (?,?,?,?)' ], data); %// << this should be dynamic

最佳答案

这个想法是您应该动态创建VALUES(...)或为每个表案例获取预定义的语句。

您可以尝试使用String -to- String映射,其中键是表名,值是VALUES语句。可以使用containers.Map对象在MATLAB中实现。这是我的意思的示例:

假设您的表名称为table_names = {'table1','table2','table3'};,并假设这些表分别具有2、3和4个字段。因此,SQL命令的相应VALUES部分将是:sql_values = {'VALUES (?,?)','VALUES (?,?,?)','VALUES (?,?,?,?)'};

现在,我们从这些Map组合中构建一个String

values_map = containers.Map(table_names,sql_values);


构建 Map后,您可以使用从列表框中获得的表名(代码中的 a)并检索正确的 VALUES语句:

vals_str = values_map(a);




或者,您可以使用逻辑来确定要在 ?,后面的括号中放入的 VALUES数量:

switch a
case 'table1'
nVals = 2;
case 'table2'
nVals = 3;
case 'table3'
nVals = 4;
end

vals_str = ['VALUES (' repmat('?,',[1 nVals-1]) '?)'];


注意:您可以根据需要保留其他 vals_str,而无需在运行时构建 Strings。我个人不太喜欢这样的版本,原因是我无法解释。



最后,在 vals_str中使用 mksqlite

mksqlite(['INSERT INTO ' z ' ' vals_str], data);

关于matlab - 在MATLAB中具有可变数量参数的SQLite语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com