我需要将数据存储在数据库中。我已经在 Matlab 中安装并配置了 MySQL 数据库(和 SQLite 数据库)。但是,我无法存储和检索除标量数值之外的任何内容。
% create an empty database called test_data base with MySQL workbench.
% connect to it in Matlab
conn=database('test_database','root','XXXXXX','Vendor','MySQL');
% create a table to store values
create_test_table=['CREATE TABLE test_table (testID NUMERIC PRIMARY KEY, test_string VARCHAR(255), test_vector BLOB, test_scalar NUMERIC)'];
curs=exec(conn,create_test_table)
到目前为止结果很好(curs.Message 是一个空字符串)
% create a new record
datainsert(conn,'test_table',{'testID','test_string','test_vector','test_scalar'},{1,'string1',[1,2],1})
% try to read out the new record
sqlquery='SELECT * FROM test_table8';
data_to_view=fetch(conn,sqlquery)
结果很糟糕:
data_to_view =
1 NaN NaN 1
从“fetch ”的文档中我期望:
data_to_view =
1×4 table
testID test_string test_vector test_scalar
_____________ ___________ ______________ ________
1 'string1' 1x2 double 1
直到我学会如何读取 Blob ,我什至愿意接受:
data_to_view =
1×4 table
testID test_string test_vector test_scalar
_____________ ___________ ______________ ________
1 'string1' NaN 1
我使用 sqlite 数据库得到了同样的结果。如何存储然后读取字符串和 blob,为什么数据不以表格格式返回?
最佳答案
Matlab 没有记录 SQLite 和 MySQL 数据库检索的默认选项是尝试将所有内容作为数值数组返回。只需要这一行:
setdbprefs('DataReturnFormat','cellarray')
或
setdbprefs('DataReturnFormat','table')
为了获得不同数据类型的结果。然而!现在我的结果是:
data_to_view =
1×4 cell array
{[2]} {'string1'} {11×1 int8} {[1]}
如果我输入:
datainsert(conn,'test_table',{'testID','test_string','test_vector','test_scalar'},{1,'string1',typecast([1,2],'int8'),1})
然后我得到:
data_to_view =
1×4 cell array
{[2]} {'string1'} {16×1 int8} {[1]}
我可以这样转换: 类型转换(data_to_view{3},'double')
答=
1 2
不幸的是,这不适用于 SQLite。我得到:
data_to_view =
1×4 cell array
{[2]} {'string1'} {' �? @'} {[1]}
我无法正确转换第三部分:
typecast(unicode2native(data_to_view{1,3}),'double')
ans =
0.0001 2.0000
所以我仍然需要学习如何在 Matlab 中读取 SQLite blob,但这是一个不同的问题。
关于mysql - 使用 Matlab 向 MySQL 插入字符串和矩阵以及从 MySQL 获取字符串和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590877/