【问题标题】:insert and fetch strings and matrices to/from MySQL with Matlab使用 Matlab 在 MySQL 中插入和获取字符串和矩阵
【发布时间】:2018-02-03 06:23:17
【问题描述】:

我需要将数据存储在数据库中。我已经在 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,为什么返回的数据不是表格格式?

【问题讨论】:

    标签: mysql database matlab


    【解决方案1】:

    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]}
    

    我可以这样转换: typecast(data_to_view{3},'double')

    ans =

     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,但这是一个不同的问题。

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多