JavaRush /Блоги Java /Random-TG /Қисми 1: Муқаддима ба SQL
Marat Sadykov
Сатҳи

Қисми 1: Муқаддима ба SQL

Дар гурӯҳ нашр шудааст

JDBC. Пайваст кардани пойгоҳи додаҳо ва эҷоди барномаи консолии Java дар IntelliJ IDEA

Муқаддима

Ин мақола як силсилаи кӯтоҳеро мекушояд, ки ба асосҳои ҳамкорӣ бо пойгоҳи додаҳо дар Java ва муқаддима ба SQL бахшида шудааст . Бисёре аз барномаҳо бо коркард ва тағир додани иттилоот ва навсозии он банд мебошанд. Азбаски маълумот ҷузъи хеле муҳими мантиқи барнома аст, аксар вақт барои он захираи алоҳида ҷудо карда мешавад. Маълумот дар он сохтор ва қоидаҳои махсус барои таъмини коркард ва нигоҳдории дуруст риоя карда мешавад. Маълумот тавассути забони махсуси дархост - SQL (Structured Query Language) дастрас ва тағир дода мешавад.
Қисми 1. Муқаддима ба SQL - 1
Системаи идоракунии пойгоҳи додаҳо нармафзорест, ки ҳамкории барномаҳои гуногуни беруниро бо додаҳо ва хидматҳои иловагӣ (қайдгирӣ, барқарорсозӣ, нусхабардорӣ ва ғ.), аз ҷумла тавассути SQL таъмин мекунад. Яъне, як қабати нармафзор байни додаҳо ва барномаҳои беруна, ки бо он кор мекунанд. Дар ин бахш, мо ба саволҳо дар бораи чӣ будани SQL, чӣ serverи SQL ҷавоб медиҳем ва аввалин барномаеро барои ҳамкорӣ бо DBMS эҷод мекунем.

Намудҳои DBMS

Якчанд намуди DBMS мавҷуданд, ки вобаста ба тарзи ташкor нигоҳдории маълумотҳо мавҷуданд:
  • иерархй. Маълумот дар сохтори дарахт ташкил карда шудааст. Намунаи системаи файлие мебошад, ки аз решаи диск оғоз ёфта, баъдан бо шохаҳои файлҳои навъҳои гуногун ва ҷузвдонҳои дараҷаҳои гуногуни лонакунӣ афзоиш меёбад.
  • Шабака. Тағироти иерархӣ, ҳар як гиреҳ метавонад зиёда аз як волидайн дошта бошад.
  • Ба an object нигаронидашуда. Маълумот дар шакли синфҳо/an objectҳо бо атрибутҳо ва принсипҳои ҳамкории онҳо тибқи OOP ташкил карда мешаванд.
  • Муносибатӣ. Маълумоти ин навъи МДМ дар ҷадвалҳо тартиб дода шудаанд. Ҷадвалҳоро бо ҳам пайванд кардан мумкин аст, маълумот дар онҳо сохторбандӣ шудааст.
Дар ин силсилаи мақолаҳо, мо ба DBMS-и релятсионӣ (ҳамчун маъмултаринҳо) бо истифода аз H2 ҳамчун намуна дида мебароем ва аз сифр замимаеро эҷод мекунем, ки як чизи шабеҳро ба кори мубодила тақлид мекунад. Савол: Чаро PostgreSQL, MySQL, MSSQL ё Oracle нест? Ҷавоб: Барои он ки бо масъалаҳои насб кардани маҷмӯи алоҳидаи барномаҳо парешон нашавед. Конфигуратсияи минбаъда, эҷоди пойгоҳи додаҳо, нозукиҳои кор дар OS-ҳои гуногун, versionҳо. Барои кор бо H2, шумо бояд ҳадди аққал амалҳоро иҷро кунед. Аммо ҳеҷ чиз ба шумо имкон намедиҳад, ки H2 JDBC-и ҷории худро ба DBMS-и релятсионӣ аз истеҳсолкунандаи дигар иваз кунед (танҳо хати суроғаи server ва номи синфи драйвер иваз карда шавад).

SQL

Барномаҳои беруна дархостҳоро ба DBMS бо забони идоракунии маълумотҳо ба забони сохтории дархостҳо тавлид мекунанд. SQL чист ва он аз забонҳои муқаррарии барномасозӣ чӣ фарқ дорад? Яке аз хусусиятҳои SQL декларативӣ мебошад. Яъне, SQL забони декларативист . Ин маънои онро дорад, ки ҳангоми ворид кардани фармонҳо, яъне эҷод кардани дархостҳо ба serverи SQL, мо тавсиф мекунем, ки маҳз чиро гирифтан мехоҳем, на бо кадом роҳ. Бо фиристодани дархост ба server SELECT * FROM CUSTOMER(тарҷумаи тахминӣ аз SQL ба русӣ: “интихоб аз ҷадвали COSTUMER интихоб кунед, интихоб аз ҳама сатрҳои ҷадвал иборат аст” ), мо барои ҳамаи корбарон маълумот мегирем. Муҳим нест, ки server маълумотеро, ки мо ба мо таваҷҷӯҳ дорем, чӣ гуна ва аз куҷо зеркашӣ ва тавлид мекунад. Чизи асосиаш дуруст тартиб додани дархост аст.
  • SQL Server чист ва он чӣ гуна кор мекунад? Муомила бо DBMS аз рӯи принсипи мизоҷ-server сурат мегирад. Баъзе барномаи беруна дархостро дар шакли операторҳо ва фармонҳо бо забони SQL мефиристад, МБМ онро коркард мекунад ва ҷавоб мефиристад. Барои соддагӣ, биёед фарз кунем, ки SQL Server = DBMS.
Агар шумо метавонед як тамғаи мошинро идора кунед, эҳтимоли зиёд ба шумо имкон медиҳад, ки дигаронро бидуни мушкилот идора кунед. Асосҳои ронандагӣ дар ҳама ҷо якхелаанд, ба истиснои ҷузъиёти хурд. Айнан ҳамин чиз ба serverҳои SQL аз истеҳсолкунандагони гуногун дахл дорад - ҳар яки онҳо versionи SQL-и худро доранд, аммо он ба стандартҳои муқарраршуда (SQL92, SQL2003...) мувофиқат мекунад. Мо операторҳо ва фармонҳоро дар чаҳорчӯбаи SQL92 истифода хоҳем кард. Изҳороти асосии SQL ба гурӯҳҳои зерин тақсим мешаванд:
  • Забони муайянкунии маълумот ( DDL ) – таърифи додаҳо. Эҷоди сохтори пойгоҳи додаҳо ва an objectҳои он;
  • Забони коркарди маълумот ( DML ) – амали мутақобилаи воқеӣ бо додаҳо: ворид кардан, ҳазф кардан, тағир додан ва хондан;
  • Забони назорати транзаксия ( TCL ) – идоракунии транзаксия;
  • Забони идоракунии додаҳо ( DCL ) - идоракунии ҳуқуқҳои дастрасӣ ба додаҳо ва сохторҳои пойгоҳи додаҳо.
Дар як силсила мақолаҳо мо се гурӯҳи аввалро дида мебароем ва ба DML диққати махсус медиҳем.

JDBC

Дар солҳои 80-уми асри гузашта компютерҳои фардии навъи PC XT/AT бозорро забт карданд. Ин асосан ба модулияти тарҳи онҳо вобаста буд. Ин маънои онро дорад, ки корбар метавонад ба осонӣ ин ё он ҷузъҳои компютери худро (протсессор, корти видео, дискҳо ва ғайра) иваз кунад. Ин амволи олиҷаноб то ба имрӯз нигоҳ дошта шудааст: мо корти видеоиро иваз мекунем ва драйверро навсозӣ мекунем (баъзан он ҳатто ба таври худкор навсозӣ мешавад). Аксар вақт, бо чунин таҳаввулот ҳеҷ чизи бад рӯй намедиҳад ва барномаҳои мавҷуда бо системаи навшуда бе барқарорсозӣ кор мекунанд. Ин ба кор дар Java бо DBMS дахл дорад. Барои стандартикунонии кор бо serverҳои SQL, ҳамкорӣ бо он метавонад тавассути як нуқтаи JDBC (Java DataBase Connectivity) анҷом дода шавад. Ин амалисозии бастаи java.sql барои кор бо DBMS мебошад. Истеҳсолкунандагони ҳама serverҳои машҳури SQL барои онҳо драйверҳои JDBC мебароранд. Диаграммаи дар поён овардашударо дида бароед. Барнома намунаҳои синфҳоро аз java.sql истифода мебарад . Сипас, мо фармонҳои заруриро барои дарёфт кардан/тағйир додани маълумот медиҳем. Баъдан, java.sql бо DBMS тавассути драйвери jdbc ҳамкорӣ мекунад ва натиҷаи тайёрро ба мо бармегардонад. Қисми 1. Муқаддима ба SQL - 2 Барои гузаштан ба DBMS аз истеҳсолкунандаи дигар, аксар вақт тағир додани JDBC ва иҷрои танзимоти асосӣ кифоя аст. Қисмҳои боқимондаи барнома тағир намеёбанд.

Барномаи якум

Биёед ба қисми амалӣ гузарем. Биёед бо истифода аз JetBrains IntelliJ IDEA IDE лоиҳаи Java эҷод кунем . Дар хотир доред, ки Ultimate Edition дорои асбоби олиҷаноб барои кор бо SQL ва пойгоҳи додаҳо - Data Grip . Аммо, он барои аксари корбарон пардохта мешавад. Ҳамин тавр, мо метавонем танҳо бо мақсади таълимӣ нашри Community IntelliJ IDEA-ро истифода барем . Ҳамин тавр:
  1. IDE-ро оғоз кунед ва лоиҳаи нав эҷод кунед:
    Қисми 1. Муқаддима ба SQL - 3

  2. Лоиҳаи Java-ро интихоб кунед, versionи SDK- ро нишон диҳед (дар мисоли JDK8, аммо ин муҳим нест):
    Қисми 1. Муқаддима ба SQL - 4

  3. Дар қадами оянда, барномаи консолро ҳамчун навъи интихоб кунед :
    Қисми 1. Муқаддима ба SQL - 5

  4. Мо номи лоиҳа , баста ва ҷойгиршавии онро дар диск нишон медиҳем (ман махсус барои ин директорияи алоҳида сохтам):
    Қисми 1. Муқаддима ба SQL - 6

  5. Биёед IDE-ро як дақиқа ҷудо кунем ва аз www.h2database.com файли зарурии JDBC-ро барои кор бо DBMS H2 зеркашӣ кунем (зеркашии платформаи мустақor ZIP):
    Қисми 1. Муқаддима ба SQL - 7

  6. Мо ба дохor файли зеркашида меравем (мо ба файли jar дар қад-қади роҳи h2\bin таваҷҷӯҳ дорем , ки баъдтар ба мо лозим меояд, онро нусхабардорӣ кунед):
    Қисми 1. Муқаддима ба SQL - 8

  7. Мо ба IDE бармегардем ва директорияҳоро дар решаи лоиҳа эҷод мекунем: db , ки дар он файлҳои дорои маълумоти DBMS ҷойгир хоҳанд шуд; lib - ин аст китобхонаи JDBC JAR:
    Қисми 1. Муқаддима ба SQL - 9

  8. Файли jar-ро аз қадами 6 ба директорияи lib интиқол диҳед ва онро ба лоиҳа ҳамчун китобхона илова кунед:
    Қисми 1: Муқаддима ба SQL - 10

  9. Биёед номи файли javaро ба src/sql/demo ба StockExchange.java иваз кунем (агар шумо фаромӯш карда бошед, мо ба "мубодила"-и оддӣ тақлид мекунем), мундариҷаи онро тағир диҳед ва иҷро кунед:
    Қисми 1. Муқаддима ба SQL - 11
Акнун мо метавонем ба DBMS пайваст шавем ва аз он ҷудо шавем. Ҳар як қадам дар консол инъикос карда мешавад. Вақте ки шумо бори аввал ба DBMS пайваст мешавед, файли базаи stockExchange.mv.db сохта мешавад .

Таҳлor code

Рамзи воқеӣ:
package sql.demo;

import java.sql.*;

public class StockExchangeDB {
    // Блок объявления констант
    public static final String DB_URL = "jdbc:h2:/c:/JavaPrj/SQLDemo/db/stockExchange";
    public static final String DB_Driver = "org.h2.Driver";

    public static void main(String[] args) {
        try {
            Class.forName(DB_Driver); //Проверяем наличие JDBC драйвера для работы с БД
            Connection connection = DriverManager.getConnection(DB_URL);//соединениесБД
            System.out.println("Соединение с СУБД выполнено.");
            connection.close();       // отключение от БД
            System.out.println("Отключение от СУБД выполнено.");
        } catch (ClassNotFoundException e) {
            e.printStackTrace(); // обработка ошибки  Class.forName
            System.out.println("JDBC драйвер для СУБД не найден!");
        } catch (SQLException e) {
            e.printStackTrace(); // обработка ошибок  DriverManager.getConnection
            System.out.println("Ошибка SQL !");
        }
    }
}

Блоки доимӣ:

  1. DB_Driver : Дар ин ҷо мо номи драйверро муайян кардем, ки онро масалан тавассути клик кардани китобхонаи пайвастшуда ва васеъ кардани сохтори он дар феҳристи lib лоиҳаи ҷорӣ пайдо кардан мумкин аст.
  2. DB_URL : Суроғаи базаи мо. Аз маълумоте иборат аст, ки бо ду нуқта ҷудо карда шудаанд:
  3. Протокол = jdbc
  4. Фурӯшанда (истеҳсолкунанда/ном) DBMS=h2
  5. Ҷойгиршавии DBMS, дар ҳолати мо, роҳ ба файл (c:/JavaPrj/SQLDemo/db/stockExchange). Барои DBMS-ҳои шабакавӣ, дар ин ҷо ба таври иловагӣ номҳо ё суроғаҳои IP-и serverҳои дурдаст, рақамҳои порти TCP/UDP ва ғайра нишон дода шудаанд.

Хатогии коркард:

Усулҳои занг дар codeи мо метавонанд хатогиҳоеро баргардонанд, ки шумо бояд ба онҳо диққат диҳед. Дар ин марҳила мо танҳо онҳоро дар консол гузориш медиҳем. Дар хотир доред, ки хатогиҳо ҳангоми кор бо DBMS аксар вақт SQLException мебошанд .

Мантиқи амалиёт:

  1. Class.forName (DB_Driver) – мо боварӣ ҳосил мекунем, ки драйвери мувофиқи JDBC дастрас аст (ки мо онро қаблан бор карда ва насб карда будем).
  2. DriverManager.getConnection (DB_URL) – пайвасти DBMS таъсис диҳед. Бо истифода аз суроғаи додашуда, худи JDBC намуд ва ҷойгиршавии DBMS-и моро муайян мекунад ва Пайвастро бармегардонад, ки мо метавонем онро барои муошират бо пойгоҳи додаҳо истифода барем.
  3. connection.close() – бастани пайвастшавӣ ба DBMS ва анҷом додани кор бо барнома.
Дар қисми навбатии силсила мо бо операторҳои DDL ва намудҳои додаҳои SQL шинос мешавем, инчунин сохтори ибтидоии базаи маълумотамонро эҷод карда, онро бо ҷадвалҳо пур мекунем. Қисми дуюм Қисми сеюм
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION