Разработка при помощи Apache Derby -- тройной выигрыш: Разработка баз данных при помощи Apache Derby, Часть 5

Создание более эффективных запросов

Оператор SQL SELECT позволяет выполнять запросы к базе данных Apache Derby и выбирать соответствующие определенным условиям данные из нескольких таблиц. Данное учебное руководство является продолжением предыдущих руководств серии. В ним показана разработка более эффективных запросов с использованием оператора SELECT. В руководстве показано, как использовать предложение ORDER BY и ключевые слова DISTINCT для изменения строк данных, выбранных в запросе; как включать в запрос основные математические операции и как использовать основные встроенные SQL-функции для преобразования данных одного типа в другой, для вычисления совокупного количества, выполнения математических операций, обработки даты и времени и использования символьных строк.

Роберт Бруннер , ученый-исследователь NCSA, старший преподаватель астрономии, Университет штата Иллинойс, г. Урбана-Шампейн

Роберт Дж. Бруннер (Robert J. Brunner) занимается научными исследованиями в Национальном центре по приложениям для суперкомпьютеров и является старшим преподавателем астрономии в университете штата Иллинойс, город Урбана-Шампейн. Автор нескольких книг и множества статей и практических руководств на различные темы.



09.04.2007

Запросы к базам данных

В предыдущей статье "Разработка при помощи Apache Derby - тройной выигрыш: Разработка баз данных при помощи Apache Derby, часть 4" были представлены основные концепции, связанные с выбором данных из базы данных Apache Derby. Концепции включали предложения SELECT, FROM и WHERE, а также понятие объединения двух таблиц для обеспечения более сложного выбора данных. В данной статье показано, как инициализировать рабочее пространство Derby при помощи прилагаемого сценария SQL для построения и заполнения базы данных Apache Derby, представленной в листингах примеров кода. Следует прочитать предыдущие статьи и инициализировать рабочее пространство Derby, запустив сценарий SQL, который можно загрузить с данной статьей.

Данная статья основана на базовых понятиях SQL, в ней показано, как использовать дополнительные операции выбора данных, включая применение в запросе основных математических операций и функций SQL. Эти операции и функции можно использовать в предложении WHERE для наложения ограничений данных в запросе или применять их в предложении SELECT для извлечения вычисленных значений. Прежде всего в статье рассматривается несколько дополнительных ключевых слов SQL, которые можно использовать для изменения результатов запроса. Запустите инструмент Derby ij, подключитесь к тестовой базе данных и выполните упражнения данной статьи для более подробного изучения процесса создания SQL-запросов к базе данных Apache Derby.


Изменение выбора данных

Все запросы, представленные в предыдущей статье, были простыми и предназначались для выбора набора столбцов в таблице, в простом объединении двух таблиц или в запросе, включающем простое предложение WHERE. Данная функция, хотя и полезная, соответствует созданию дампа данных. К счастью, SQL предоставляет различные методы для фильтрации как строк, выбранных в таблице, так и извлеченных данных. Далее приводятся сведения о двух основных методах управления извлеченными в запросе данными: ключевое слово DISTINCT и предложение ORDER BY.

Извлечение отдельных строк

По умолчанию при выборе данных при помощи SQL-запроса из базы данных извлекаются все строки, удовлетворяющие предложению WHERE. В некоторых случаях это может привести к выбору строк, имеющих одинаковые значения столбцов. Если требуется ограничить запрос и выбрать только строки с уникальными значениями, можно использовать спецификатор DISTINCT, как показано в листинге 1.

Листинг 1. Использование в запросе спецификатора DISTINCT
rb$ java org.apache.derby.tools.ij    
ij version 10.1
ij> connect 'jdbc:derby:test' ;
ij> SELECT DISTINCT vendorNumber AS "Vendor #" FROM bigdog.vendors ;
Vendor #   
-----------
3          
2          
1          

3 rows selected

ij> SELECT DISTINCT vendorNumber AS "Vendor #", itemNumber as "Item #" 
    FROM bigdog.vendors WHERE itemNumber > 5 ;
Vendor #   |Item #     
-----------------------
1          |6          
1          |7          
1          |8          
3          |9          
3          |10         

5 rows selected

ij>

411 в DISTINCT

Для использования спецификатора DISTINCT он должен находиться в первом элементе в списке предложения SELECT, как это показано в листинге 1. При этом в предложении SELECT должен находиться только один спецификатор DISTINCT. Если в выбранных строках имеется столбец со значениями NULL, при определении уникальных строк несколько значений NULL считаются дубликатами.

Первый запрос в этом листинге использует спецификатор DISTINCT для ограничения выходных данных запроса только отдельными или уникальными значениями столбца vendorNumber - единственного столбца в списке предложения SELECT. В примере схемы, используемой в данных статьях, имеется только три поставщика (vendorNumber ограничено значениями 1, 2 или 3). Таким образом, при использовании в запросе спецификатора DISTINCT выбираются только три строки.

Но спецификатор DISTINCT применяется ко всему списку выбранных столбцов. Если в списке после ключевого слова DISTINCT перечислено несколько столбцов, то выбирается только уникальная комбинация всех столбцов. Это показано во втором примере, где и vendorNumber и itemNumber находятся в списке предложения SELECT . Поскольку у каждого элемента имеется уникальное значение itemNumber, все комбинации этих двух столбцов являются уникальными, и выбираются все строки, удовлетворяющие предложению WHERE, другими словами спецификатор DISTINCT не влияет на результат.

И последний момент. В примерах в листинге 1 можно заметить, что строки выбираются в другом порядке. Если важен порядок выбранных строк, его можно легко изменить при помощи предложения ORDER BY в запросе, как это показано в следующем разделе.

Порядок строк

Как правило, нельзя предположить, что Apache Derby или другая база данных возвращает по запросу строки в определенном порядке. Если порядок важен, можно воспользоваться предложением ORDER BY для указания Apache Derby упорядочить особым способом данные, возвращаемые по запросу. Обычно для этого необходимо задать столбец, который будет использоваться для предоставления порядковых значений для сравнения, как это показано в листинге 2.

Листинг 2. Использование в запросе предложения ORDER BY
ij> SELECT v.vendorNumber AS "Vendor #", vendorName as "Vendor",
        p.price as "Price", p.itemNumber AS "Item #"
    FROM bigdog.products AS p, bigdog.vendors AS v
    WHERE p.itemNumber = v.itemNumber AND p.price > 20.0
    ORDER by v.vendorNumber ;
Vendor #   |Vendor                        |Price   |Item #     
---------------------------------------------------------------
1          |Luna Vista Limited            |32.95   |8          
1          |Luna Vista Limited            |24.95   |7          
1          |Luna Vista Limited            |99.99   |2          
2          |Mikal Arroyo Incorporated     |49.95   |5          
2          |Mikal Arroyo Incorporated     |29.95   |4          
3          |Quiet Beach Industries        |34.95   |10         

6 rows selected

       
ij> SELECT v.vendorNumber AS "Vendor #", vendorName as "Vendor",
        p.price as "Price", p.itemNumber AS "Item #"
    FROM bigdog.products AS p, bigdog.vendors AS v
    WHERE p.itemNumber = v.itemNumber AND p.price > 20.0
    ORDER BY v.vendorNumber ASC, p.price DESC ;
Vendor #   |Vendor                        |Price   |Item #     
---------------------------------------------------------------
1          |Luna Vista Limited            |99.99   |2          
1          |Luna Vista Limited            |32.95   |8          
1          |Luna Vista Limited            |24.95   |7          
2          |Mikal Arroyo Incorporated     |49.95   |5          
2          |Mikal Arroyo Incorporated     |29.95   |4          
3          |Quiet Beach Industries        |34.95   |10         

6 rows selected

ij>

Использование имен столбцов: Лучшие методы

Хотя использование номеров столбцов кажется довольно удобным, но это не очень хорошая идея. Почему? Подумайте, что произойдет, если изменить столбцы, перечисленные в предложении SELECT, или просто изменить их порядок. Если при этом не изменить номера, используемые в предложении ORDER BY, запрос будет остановлен или, что еще хуже, вернет неверные данные. Как правило, лучше всегда явно задавать имена столбцов, даже если это требует большего кодирования.

В листинге 2 в первом запросе используется предложение ORDER BY для получения списка подмножества всех строк в таблице, полученной при объединении таблиц bigdog.vendors и bigdog.products. Строки упорядочены по значению vendorNumber (подмножество составлено путем применения предложения WHERE). Предложение ORDER BY может содержать имя столбца, как в данном примере, или номер столбца, получаемый из порядка, в котором столбцы перечислены после ключевого слова SELECT.

Можно также задать несколько столбцов для сортировки и даже задать значение ASC для сортировки по возрастанию или DESC для сортировки по убыванию. Например, если в первом запросе используется строка ORDER BY 1 DESC, 4 DESC, запрос вернет те же строки, но они будут отсортированы при помощи столбца vendorNumber как основного столбца сортировки в убывающем порядке, а затем по столбцу itemNumber в качестве дополнительного столбца сортировки в убывающем порядке.


Математические операции в запросе

Выбор столбцов в базе данных предоставляет множество преимуществ, но возможность выполнять вычисления и выбирать числа на основе данных в таблице открывает дополнительные возможности. Apache Derby предоставляет несколько математических операторов, описанных в таблице 1, которые можно использовать в предложении SELECT или WHERE.

Таблица 1. Математические операторы Apache Derby
ОператорПримерОписание
унарный ++1.0Пустая команда или отсутствие операции, например, +4 = 4
унарный --p.priceИзменение знака значения
+p.itemNumber + 10Добавление второго значения к первому
-p.itemNumber - 10Вычитание второго значения из первого
*p.price * 1.0825Умножение первого значения на второе
/p.price / 100.0Деление первого значения на второе

Использовать эти операторы довольно просто, поскольку их поведение, как правило, ожидаемо. Например, если налог с продаж составляет 8,25%, можно получить цену товара до и после уплаты налога с продаж при помощи предложения SELECT price, price * 1.0825 FROM bigdog.products ;. Другой пример. Если имеется столбец с именем numberItems, отслеживающий количество купленных товаров, и столбец с именем price, содержащий цену продажи товара, можно получить общую сумму, уплаченную за эти товары по данной цене при помощи предложения numberItems * price. Несколько запросов, представленных в коде листингов далее в этой статье, являются дополнительными примерами использования этих операторов.

Единственная проблема применения этих операторов обусловлена сложностью при использовании в математических операциях различных типов данных, например, целых чисел и чисел с плавающей точкой. Если оба операнда одного типа данных, получаемый тип будет таким же. При выполнении деления это может привести к усечению (например, если используются два целых числа), что может вызвать неожиданные проблемы. Решить эту проблему можно при помощи функции CAST, описанной далее в этой статье. С другой стороны, если два операнда представляют собой разные типы данных, получаемый тип представляет собой более сложный тип.


Использование SQL-функций Derby

SQL представляет собой эффективный и мощный язык выражений, который можно использовать для различных действий. Часть эффективности языка SQL обусловлена возможностью непосредственно взаимодействовать с различными типами данных. В данном разделе описаны стандартные встроенные функции SQL-92, входящие в Apache Derby, которые можно использовать в операторах SQL для упрощения различных общих задач обработки данных. В этой статье данные функции разделены на пять категорий:

  • Преобразование типов;
  • Агрегация;
  • Математические операции;
  • Дата и время;
  • Символьная строка.

Функции преобразования типов

Простейшим типом функций, используемых в Apache Derby, является функция type-conversion. Эти функции можно использовать для явного преобразования одного типа данных, например, символьной строки, в другой тип данных, например, дату или целое числов, или наоборот. Функции преобразования данных разделяются на две основные категории: функции явных типов, описанные в таблице 2, и функция CAST, предоставляющая более эффективный подход к преобразованию типов.

Таблица 2. Функции преобразования типов Apache Derby
ФункцияПримерОписание
BIGINTBIGINT(123.45)Возвращается 64-битная целая константа для данной строки символов или номера.
CHARCHAR(123.45)Возвращается символьное представление фиксированной длины (максимум 254 байт) данного значения, которое должно быть одним из встроенных типов Apache Derby. Можно предоставить второй дополнительный аргумент для задания длины символьной строки.
DATEDate('2006-05-16')Возвращается представление даты для входного значения.
DOUBLEDOUBLE(123.45)Возвращается представление с плавающей точкой и двойной точностью для входного числа или символьной строки.
INTEGERINTEGER(123.45)Возвращается целое число для данной символьной строки, даты, времени или числа.
SMALLINTSMALLINT(123.45)Возвращается малое целое число для данной строки символов или номера.
TIMETIME('12:24:30')Возвращается представление времени для входного значения.
TIMESTAMPTIMESTAMP('2006-05-16','12:24:30')Возвращается представление метки времени для входного значения.
VARCHARVARCHAR(123.45)Возвращается символьное представление переменной длины вплоть до 32672 байт для данного значения даты, времени, метки времени или символьной строки.

Функцию CAST можно использовать для изменения длины символьной строки или для преобразования одного типа данных в другой, включая типы данных, не поддерживаемые функциями преобразования типа, которые перечислены в таблице 2 (например, DECIMAL). Таким методом функцию CAST можно использовать для преобразования выбранных столбцов в более читаемые или компактные, или для сохранения точности представления чисел в математических выражениях.

Явное преобразование типов: Лучшие методы

А зачем волноваться, если Derby часто выполняет неявное преобразование типов автоматически? Простой ответ заключается в том, что явное задание упрощает читаемость кода логики. Если код проще понять, его проще обслуживать, и, как правило, такой код более устойчив к ошибкам программирования. Явное выражение при написании SQL-запросов всегда является лучшим методом.

При извлечении результатов из базы данных в Java™ программе, также имеется возможность преобразования типов данных в приложении. Оба метода предоставляют одинаковый результат, но некоторое преимущество обеспечивается за счет того, что база данных выполняет приведение типов значений, поэтому можно свести к минимуму сетевой трафик, если база данных будет отправлять только фактически необходимые данные и передавать обработку в механизм базы данных, а не в потенциально тонкий клиент. Такой подход может привести к перегрузке сервера базы данных в крайних случаях, поэтому использовать его можно только при гарантированной работе сервера. Применение функций преобразования данных довольно просто, как это показано в листинге 3.

Листинг 3. Использование оператора CAST
ij> SELECT p.price AS "Price", 
        DOUBLE(p.price * 1.0825) AS "Float Total", 
        CAST(p.price * 1.0825 AS DECIMAL(6,2)) AS "Total",
        CAST(p.description AS CHAR(20)) AS "Description"
    FROM bigdog.products AS p 
    WHERE p.price > 21.0 AND p.stockDate < Date('2006-01-21') ;
Price   |Float Total           |Total    |Description         
--------------------------------------------------------------
24.95   |27.008375             |27.00    |White beach towel   
32.95   |35.668375             |35.66    |Blue-striped beach to

2 rows selected

Простой запрос, представленный в листинге 3, показывает, как правильно использовать некоторые из функций преобразования типов. Код во второй строке этого запроса преобразует произведение значения в выбранном столбце price и числового множителя 1,0875, применяющего налог 8,75% к цене товара, в число типа DOUBLE с плавающей точкой. В третьей и четвертой строке функция CAST используется для преобразования этого же произведения в тип DECIMAL, а затем выполняется усечение выбранного столбца description для отображения только 20 символов. Обратите внимание, что функция CAST обрезает рассчитанную цену при преобразовании значения в тип данных DECIMAL. Наконец, функция DATE преобразует символьную строку даты в тип данных DATE. Хотя данный шаг и не требуется, явное выражение является лучшим методом (см. врезку о явных типах).

В данном запросе также показано применение предложения AS для переименования столбцов в запросе. Это важно, поскольку запрос использует вместо имен столбцов функции. Если в Apache Derby нет явного имени столбца, то автоматически используются номера столбцов, а это мало что дает для представления о природе данных. Явное предоставление имени для всех столбцов позволяет избежать этой проблемы. Кроме того, поскольку эти имена включают пробелы, необходимо заключать их в двойные кавычки для указания инструменту ij того, что это символьные константы.

Расчет агрегированных значений

Apache Derby также содержит функции, работающие с несколькими строками, известные как агрегатные функции, которые можно использовать для улучшения запросов. Обобщенные функции, также известные как функции множества в SQL-92 или, более неофициально, как функции столбцов, возвращают значение, рассчитанное для столбца по нескольким строкам. Apache Derby поддерживает пять агрегатных функций, представленных в таблице 3.

Таблица 3. Агрегатные функции Apache Derby
ФункцияПримерОписание
AVGAVG(p.price)Возвращается среднее значение в столбце по всем строкам, удовлетворяющим выражению. Можно использовать только со встроенными типами числовых данных. Точность возвращаемого значения определяется точностью значений оцениваемых столбцов.
COUNTCOUNT(p.price)Возвращается количество строк, удовлетворяющих выражению, например, запросу. Можно использовать с любым типом данных.
MAXMAX(p.price)Возвращается максимальное значение в столбце по всем строкам, удовлетворяющим выражению. Можно использовать только со встроенными типами числовых данных.
MINMIN(p.price)Возвращается минимальное значение в столбце по всем строкам, удовлетворяющим выражению. Можно использовать только со встроенными типами числовых данных.
SUMSUM(p.price)Возвращается сумма значений в столбце по всем строкам, удовлетворяющим выражению. Можно использовать только со встроенными типами числовых данных.

Данные агрегатные функции часто используются для быстрого поиска полезной информации, которую трудно найти другим способом, как это показано в листинге 4.

Листинг 4. Использование агрегатных функций в запросе
ij> SELECT COUNT(p.itemNumber) AS Number, 
        CAST((AVG(p.price) + 0.005) AS DECIMAL(5,2)) AS Average,
        MIN(p.stockDate) AS "First Date", MAX(p.stockDate) AS "Last Date"
    FROM bigdog.products AS p ;
NUMBER     |AVERAGE    |First Date|Last Date 
---------------------------------------------
10         |31.66      |2005-12-20|2006-03-31

1 row selected

В листинге 4 используется четыре из пяти агрегатных функций для получения суммарной информации о данных в таблице bigdog.products. Функция COUNT показывает, что таблица содержит десять строк (поскольку в запросе для ограничения строк, выбираемых из таблицы, не используется предложение WHERE). Функция AVG рассчитывает среднюю цену всех товаров из таблицы bigdog.products. Так как результаты расчетов представлены как число с плавающей запятой, запрос в явном виде приводит результаты обратно в тип данных DECIMAL подходящего размера. В отличие от примера в листинге 3, в данном примере добавляется значение 0,005 для того, чтобы функция CAST правильно округляла рассчитанное значение. Наконец, функции MIN и MAX извлекают минимальное и максимальное значения из таблицы bigdog.products.

Математические функции

Apache Derby содержит три встроенные функции, представленные в таблице 4, позволяющие выполнять в SQL-запросе более сложные математические операции, особенно при использовании с математическими операторами, описанными ранее в данной статье. Эти функции можно использовать в предложении запроса SELECT или WHERE.

Таблица 4. Математические функции Apache Derby
ФункцияПримерОписание
ABS или ABSVALABS(-1.0)Возвращается абсолютное значение выражения, которое должно быть одним из встроенных числовых типов. Возращаемый тип соответствует агрументу.
MODMOD(1, 2)Возвращается остаток, получаемый при делении первого аргумента на второй. Возвращаемый тип соответствует аргументу наибольшего типа целого числа (SMALLINT, INTEGER или BIGINT). Знак результата определяется исключительно знаком первого аргумента.
SQRTSQRT(0.5)Возвращение значения квадратного корня выражения, это должно быть значение с плавающей запятой. Возращаемый тип соответствует агрументу.

Функции даты и времени

Apache Derby обеспечивает расширенную поддержку для типов данных даты и времени. Для упрощения использования этих типов в запросах в базе данных имеется шесть функций даты и времени, представленных в таблице 5. Эти функции часто предоставляют другой способ использования функций преобразования данных, описанных ранее. Например, можно заменить часть кода p.stockDate < Date('2006-01-21') предложения WHERE в запросе на листинге 3, на код YEAR(p.stockDate) < 2006.

Таблица 5. Функции даты и времени Apache Derby
ФункцияПримерОписание
DAYDAY(p.stockDate)Возвращается целое число, содержащее компонент дня даты, метки времени, или символьная строка, содержащая допустимую дату
HOURHOUR('12:21:30')Возвращается целое число, содержащее компонент времени даты, метки времени, или символьная строка, содержащая допустимое время
MINUTEMINUTE('12:21:30')Возвращается целое число, содержащее компонент минут даты, метки времени, или символьная строка, содержащая допустимое время
MONTHMONTH('2005-12-20')Возвращается целое число, содержащее компонент месяца даты, метки времени, или символьная строка, содержащая допустимую дату
SECONDSECOND('12:21:30')Возвращается целое число, содержащее компонент секунд времени, метки времени, или символьная строка, содержащая допустимое время
YEARYEAR(p.stockDate) < 2006Возвращается целое число, содержащее компонент года даты, метки времени, или символьная строка, содержащая допустимую дату

Функции символьных строк

Последняя категория функций в Apache Derby служит для упрощения работы с символьными данными. Эти восемь функций, представленных в таблице 6, можно использовать для вычисления символьных значений, преобразования символьных значений в верхний или нижний регистр, удаления пробелов в начале и в конце строки, поиска определенной подстроки или выбора подстроки.

Символьные значения, используемые в этих функциях, могут представлять собой значения столбцов базы данных, являющиеся одним из типов данных, поддерживаемых базой данных Apache Derby, значения столбцов базы данных, которые можно непосредственно преобразовывать в тип символьных данных, или постоянные символьные строки. Например, запрос SELECT UCASE(p.description), UCASE('hello world'), UCASE(p.stockDate) FROM bigdog.products AS p ; возвращает значения трех столбцов, отображаемые как символьные строки в верхнем регистре.

Таблица 6. Функции символьных строк Apache Derby
ФункцияПримерОписание
||(p.description||v.vendorName)Оператор сцепления объединяет два значения в новую символьную строку. Если оба значения типа CHAR, результат также будет типа CHAR. Если значения типа VARCHAR или цифрового типа данных, который можно преобразовать в тип VARCHAR, полученный тип будет типом VARCHAR.
LCASE или LOWERLCASE(p.description)Возвращается символьная строка, в которой все буквенные символы входного значения преобразованы в нижний регистр.
LENGTHLENGTH(p.description)Возвращается количество символов входного значения. Несимвольные данные неявно преобразуются в символьную строку.
LOCATELOCATE('beach',p.description)Возвращается начальное положение первого вхождения подстроки в поисковой цепи или ноль, если подстрока не найдена. Первым аргументом является подстрока, второй аргумент представляет собой поисковую цепочку, дополнительно можно предоставить третий аргумент - начальное положение.
RTRIMRTRIM(p.description)Возвращается символьная строка, в которой удалены все пробелы в конце входного значения.
LTRIMLTRIM(p.description)Возвращается символьная строка, в которой удалены все пробелы в начале входного значения.
SUBSTRSUBSTR(p.description, 1, 4)Возвращается часть входной символьной строки как VARCHAR, начиная с заданного положения и до конца символьной строки или до местоположения, заданного дополнительным третьим аргументом. Положительное начальное положение отсчитывается от начала строки, отрицательное - от конца строки.
UCASE или UPPERUCASE(p.description)Возвращается символьная строка, в которой все буквенные символы входного значения преобразованы в верхний регистр.

Заключение

В этой статье описываются некоторые методы создания эффективных SQL-запросов. Во-первых, ключевое слово DISTINCT использовано для выбора в запросе только уникальных строк. Во-вторых, предложение ORDER BY использовано для сортировки выбранных в запросе строк по одному или нескольким критериям. В-третьих, были представлены основные математические операторы, которые можно использовать в запросах. И наконец, подробно описаны основные встроенные функции SQL. Эти функции часто используются для упрощения сложных SQL-запросов. Данные методы будут более подробно представлены в следующих статьях, где они будут использоваться для избирательного удаления или изменения данных в существующей базе данных.

Ресурсы

Научиться

Получить продукты и технологии

  • Загрузите Apache Derby с домашней страницы проекта Apache Derby;
  • Добавьте новизны в ваши следующие проекты разработки при помощи пробного ПО IBM, доступного в виде файлов для загрузки и на DVD.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source, Information Management
ArticleID=208184
ArticleTitle=Разработка при помощи Apache Derby -- тройной выигрыш: Разработка баз данных при помощи Apache Derby, Часть 5
publish-date=04092007