如何使用matlab访问数据库,并且传入带参数的查询语句
错误场景:
最近在使用matlab构建基于机器学习的金融数据分析模型,遇到一个查询sqlite数据库的场景,通常使用matlab查询数据库的办法是如下语句:
conn_index = sqlite(index_db,'readonly');
sql_find_max_number_n='select max(overall_index_id) from level2_index_n';
max_number_n=cell2mat(fetch(conn_index,sql_find_max_number_n));
但是当你需要输入查询条件的时候,你可能以为是这么写的:
conn_index = sqlite(index_db,'readonly');
sql_find_fgroupid_db_file_name=strcat('select fgroupid, db_file_name from level2_index_n where overall_index_id=' ,num2str(row_id));%%%这一句会报错为 sql参数必须是 a row vector of chars or cell array.
group_id_db_file_name=fetch(conn_index,sql_find_fgroupid_db_file_name);
错误提示
其实这里第二句话就会报错,如下这一句会报错为 sql参数必须是 a row vector of chars or cell array.
错误原因:
因为strcat自动合并后,会给你一个single char column based vector, size 1x74. 匪夷所思,它把所有的每一个字母都当作一个行来实现。但是fetch函数要的是基于行的字符串向量,所以你要做的有两个办法
1. 转置上面的矩阵
2. group_id_db_file_name=group_id_db_file_name'
2. 使用cell array 用中括弧来表示,实际上这个也是matlab推荐的方式。
3. group_id_db_file_name={'select fgroupid, db_file_name from level2_index_n where overall_index_id=',num2str(11)}