exponenta event banner

обновление

Замена данных в таблице базы данных данными MATLAB

Описание

пример

update(conn,tablename,colnames,data,whereclause) экспортирует переменную MATLAB ®data в текущем формате в таблицу базы данных tablename использование подключения к базе данных conn. Можно использовать SQL WHERE для указания существующих записей в базе данных, которые требуется заменить.

Примеры

свернуть все

Подключитесь к базе данных Microsoft ® Access™ и сохраните обновляемые данные в массиве ячеек. Затем обновите один столбец данных в таблице базы данных. Закройте подключение к базе данных.

Создание подключения к базе данных conn в базу данных Microsoft Access. Этот код предполагает, что вы подключаетесь к источнику данных с именем dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, который содержит следующие столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импорт всех данных из inventorytable в качестве массива ячеек с помощью connи просмотрите первые три строки импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery,'DataReturnFormat','cellarray');
results(1:3,:)
ans =

  3×4 cell array

    {[1]}    {[1700]}    {[15]}    {'2014-09-23 09:3…'}
    {[2]}    {[1200]}    {[ 9]}    {'2014-07-08 22:5…'}
    {[3]}    {[ 356]}    {[17]}    {'2014-05-14 07:1…'}

Определите массив ячеек, содержащий имя обновляемого столбца.

colnames = {'quantity'};

Определите массив ячеек, содержащий новые данные, 2000.

data = {2000};

Обновить столбец quantity в inventorytable для продукта с productnumber равно 1.

tablename = 'inventorytable';
whereclause = 'WHERE productnumber = 1';

update(conn,tablename,colnames,data,whereclause)

Повторно импортировать данные и просмотреть обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery,'DataReturnFormat','cellarray');
results(1:3,:)
ans =

  3×4 cell array

    {[1]}    {[2000]}    {[15]}    {'2014-09-23 09:3…'}
    {[2]}    {[1200]}    {[ 9]}    {'2014-07-08 22:5…'}
    {[3]}    {[ 356]}    {[17]}    {'2014-05-14 07:1…'}

В inventorytable данные, продукт с номером продукта, равным 1 имеет обновленное количество 2000 единиц.

Закройте подключение к базе данных.

close(conn)

Подключитесь к базе данных Microsoft Access и сохраните обновляемые данные в виде таблицы. Затем обновите несколько столбцов данных в таблице базы данных. Закройте подключение к базе данных.

Создание подключения к базе данных conn в базу данных Microsoft Access. Этот код предполагает, что вы подключаетесь к источнику данных с именем dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, который содержит следующие столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импорт всех данных из inventorytable с помощью connи отобразить несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-09-23 09:38:34.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Определите массив ячеек, содержащий имена столбцов, которые вы обновляете в inventorytable.

colnames = {'price','inventorydate'};

Определите таблицу, содержащую новые данные. Обновите цену до $15 и установите отметку времени запасов на '2014-12-01 08:50:15.000'.

data = table(15,{'2014-12-01 08:50:15.000'}, ...
    'VariableNames',{'price','inventorydate'});

Обновить столбцы price и inventorydate в таблице inventorytable для номера продукта, равного 1.

tablename = 'inventorytable';
whereclause = 'WHERE productnumber = 1';

update(conn,tablename,colnames,data,whereclause)

Повторно импортировать данные и просмотреть обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       15      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Продукт с номером продукта, равным 1 имеет обновленную цену $15 и отметку времени '2014-12-01 08:50:15.000'.

Закройте подключение к базе данных.

close(conn)

Подключитесь к базе данных Microsoft Access и сохраните обновляемые данные в массиве ячеек. Затем обновите несколько записей данных в таблице, используя несколько WHERE пункты. Закройте подключение к базе данных.

Создание подключения к базе данных conn в базу данных Microsoft Access. Этот код предполагает, что вы подключаетесь к источнику данных с именем dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, который содержит следующие столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импорт всех данных из inventorytable с помощью connи отобразить первые несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Определите массив ячеек, содержащий имя обновляемого столбца.

colnames = {'quantity'};

Определите массив ячеек, содержащий новые данные. Обновите количества для двух продуктов.

A = 10000;    % new quantity for product number 5
B = 5000;     % new quantity for product number 8

data = {A;B}; % cell array with the new quantities

Обновить столбец quantity в inventorytable для продуктов с номерами продуктов, равными 5 и 8. Создание массива ячеек whereclause который содержит два WHERE предложения, по одному для каждого продукта.

tablename = 'inventorytable';
whereclause = {'WHERE productnumber = 5';'WHERE productnumber = 8'};

update(conn,tablename,colnames,data,whereclause)

Повторно импортировать данные и просмотреть обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5           10000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            5000        5      '2011-06-18 11:45:35.000'

Продукт с номером продукта, равным 5 имеет обновленное количество 10000 единиц. Продукт с номером продукта, равным 8 имеет обновленное количество 5000 единиц.

Закройте подключение к базе данных.

close(conn)

Подключитесь к базе данных Microsoft Access и сохраните обновляемые данные в массиве ячеек. Затем обновите несколько столбцов данных в таблице, используя несколько WHERE пункты. Закройте подключение к базе данных.

Создание подключения к базе данных conn в базу данных Microsoft Access. Этот код предполагает, что вы подключаетесь к источнику данных с именем dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, который содержит следующие столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импорт всех данных из inventorytable с помощью connи отобразить первые несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Определите массив ячеек, содержащий имена обновляемых столбцов.

colnames = {'quantity','price'};

Определите массив ячеек, содержащий новые данные. Обновите количества и цены для двух продуктов.

% new quantities and prices for product numbers 5 and 8 
% are separated by a semicolon in the cell array
data = {10000,5.5;9000,10};

Обновить столбцы quantity и price в inventorytable для продуктов с номерами продуктов, равными 5 и 8. Создание массива ячеек whereclause который содержит два WHERE предложения, по одному для каждого продукта.

tablename = 'inventorytable';
whereclause = {'WHERE productnumber = 5';'WHERE productnumber = 8'};

update(conn,tablename,colnames,data,whereclause)

Повторно импортировать данные и просмотреть обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5           10000        6      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            9000       10      '2011-06-18 11:45:35.000'

Продукт с номером продукта, равным 5 имеет обновленное количество 10000 единицы и цена, равная 6округляется до ближайшего числа. Продукт с номером продукта, равным 8 имеет обновленное количество 9000 единицы и цена, равная 10.

Закройте подключение к базе данных.

close(conn)

Входные аргументы

свернуть все

Подключение к базе данных, указанное как ODBC connection объект или JDBC connection объект, созданный с помощью database функция.

Имя таблицы базы данных, указанное как вектор символов или скаляр строки, обозначающий имя таблицы в базе данных.

Пример: 'employees'

Типы данных: char | string

Имена столбцов таблицы базы данных, указанные как массив ячеек из одного или нескольких векторов символов или строковый массив для обозначения столбцов в существующей таблице базы данных tablename.

Пример: {'col1','col2','col3'}

Типы данных: cell | string

Обновление данных, указанных как массив ячеек, числовая матрица, таблица, структура или массив наборов данных.

При подключении к базе данных с использованием драйвера JDBC перед запуском преобразуйте данные обновления в поддерживаемый формат update. Если data содержит даты, время или метки времени MATLAB, используйте следующее форматирование:

  • Даты должны быть символьными векторами формы yyyy-mm-dd.

  • Времена должны быть символьными векторами формы HH:MM:SS.

  • Метки времени должны быть векторами символов формы yyyy-mm-dd HH:MM:SS.FFF.

Параметры настройки базы данных NullNumberWrite и NullStringWrite не применяются к этой функции. Если data содержит null записей и NaNs, преобразовать эти записи в пустое значение ''.

  • Если data является структурой, то имена полей в структуре должны совпадать colnames.

  • Если data является таблицей или массивом наборов данных, то имена переменных в таблице или массиве наборов данных должны совпадать colnames.

SQL WHERE предложение, указанное как вектор символов или строковый скаляр для одного условия или массив ячеек из векторов символов или строковый массив для нескольких условий.

Пример: 'WHERE producttable.productnumber = 1'

Типы данных: char | cell | string

Совет

  • Значение AutoCommit свойство в connection объект определяет, update автоматически фиксирует данные в базе данных.

    • Для просмотра AutoCommit значение, доступ к нему с помощью connection объект; например, conn.AutoCommit.

    • Для установки AutoCommit значение, используйте соответствующий аргумент пары имя-значение в database функция.

    • Чтобы зафиксировать данные в базе данных, используйте commit функция или выпуск SQL COMMIT оператор с использованием exec функция.

    • Для отката данных используйте rollback или выдать SQL ROLLBACK оператор с использованием exec функция.

  • Вы можете использовать datainsert добавление новых строк вместо замены существующих данных.

  • Количество SQL для обновления нескольких записей WHERE пункты в whereclause должно соответствовать количеству записей в data.

  • Если порядок записей в базе данных не является постоянным, то для идентификации записей можно использовать значения имен столбцов.

  • Если это сообщение об ошибке появляется при открытии таблицы базы данных в режиме редактирования:

    [Vendor][ODBC Product Driver] The database engine could 
    not lock table 'TableName' because it is already in use 
    by another person or process.
    

    Затем закройте таблицу и снова запустите update функция.

  • Повторный запуск той же операции обновления может привести к появлению этого сообщения об ошибке.

    ??? Error using ==> database.update
    Error:Commit/Rollback Problems
    
Представлен до R2006a