вставлять и извлекать строки и матрицы в / из MySQL с помощью Matlab

0

Мне нужно хранить данные в базе данных. Я установил и настроил базу данных MySQL (и базу данных SQLite) в Matlab. Однако я не могу хранить и извлекать ничего, кроме скалярных числовых значений.

% 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

Из документации для " извлечения " я ожидал бы:

data_to_view =
    1×4 table
         testID        test_string      test_vector    test_scalar    
      _____________    ___________    ______________    ________    
           1            'string1'       1x2 double         1  

Пока я не научусь читать капли, я бы даже согласился:

data_to_view =
    1×4 table
         testID        test_string      test_vector    test_scalar    
      _____________    ___________    ______________    ________    
           1            'string1'           NaN             1  

Я получаю то же самое с базой данных sqlite. Как я могу хранить, а затем читать строки и капли, и почему данные не возвращаются в табличном формате?

Теги:
database

1 ответ

0

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

Поэтому мне все еще нужно научиться читать SQLite blob в Matlab, но это другой вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню