ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

Все о MySQL. Использование маркеров DBI-интерфейса


28-12-2009

Хотя это и составляет сверхзадачу для простых приложений, важно знать, что метод prepare() в некоторых ситуациях может обеспечить существенный выигрыш в произ­водительности. Многие сценарии заключаются в подготовке одного единственного запроса (например, запроса INSERT) и последующем его многократном выполнении с различными значениями, что необходимо и тогда, когда один и тот же запрос выполняется без каких-либо изменений. Например, предположим, что необходимо добавить некоторые данные в базу данных. Оператор INSERT может оставаться по форме одним и тем же, и значения данных при этом изменяются. В таком случае методы prepare() и execute() можно использовать с маркерами DBI-интерфейса, как показано в следующем примере. Это позволит уменьшить нагрузку и повысить производительность приложения.
Листинг 20.14.
#!/usr/bin/perl
# загрузить модуль use DBI();
# соединить
my $dbh = DBI->connect{"DBI:mysql:database=somedb;host=localhost", "user", "pass");
# выполнить запрос
$sth = $dbh->prepare("INSERT INTO books (title, author) VALUES
(?,?)");
# прочитать данные из файла
open (FILE, "data. txt") or die (" Невозможно открыть файл"); @lines = <FILE>; close (FILE);
# просмотр исходных данных
# разбиение на составляющие части
# замена маркеров в операторе foreach $line (@lines) 
{
my ($title, $author) = split (",", $line); chomp ($title); chomp ($author);
$sth->execute{$title, $author) or die ($dbh->errstr);
}
# очистить
$sth->finish();
$dbh->disconnect();
Знаки вопроса в операторе prepare() - это и есть маркеры, и они обрабатываются аналогично переменным. Знаки вопросов проставляются в местах, где позднее будут по­мещены значения данных. Сами данные подставляются в последующем операторе exe-cute(). Обычно оператор execute() размещается в цикле, при этом новые значения пе­ременных подставляются при каждой итерации, как это сделано в предыдущем примере исходного текста (который считывает их из текстового файла). Значения переменных, за­данные в методе execute(), называются связанными значениями, а процесс установления соответствия между связанными значениями и маркерами, называется связыванием.
Дополнительные функции, имеющие отношение к выполнению запросов, перечислены в табл. 20.2.

Реальная жизнь вносит свои коррективы...
Следует сказать, что предыдущий пример более иллюстративный, чем практический. В реальной ситуации при необходимости добавления данных из файла в таблицу, быстрее и эффективнее сработает оператор LOAD DATA INFILE, имеющийся в арсенале MySQL. Но данный пример лучше показывает работу маркеров.
Однако сценарий Perl может пригодиться, когда выбираемые данные должны быть обработаны с помощью регулярных выражений перед их вставкой в базу данных (это обычно необходимо при выборке данных из устаревших баз данных/приложений). В таких ситуациях просмотр в цикле содержимого файла с использованием маркеров представляет собой очень удобный метод. Более подробная информация об операторе LOAD DATA INFILE находится в главе 8, "Обработка баз данных и таблиц".

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
Все о MySQL. Выполнение запросов Все о MySQL. Обработка результирующего набора