JavaRush /Java блогу /Random-KY /1-бөлүк: SQLге киришүү
Marat Sadykov
Деңгээл

1-бөлүк: SQLге киришүү

Группада жарыяланган

JDBC. Маалымат базасын туташтыруу жана IntelliJ IDEAда Java консолдук тиркемесин түзүү

Киришүү

Бул макала Javaдагы маалымат базалары менен иштешүүнүн негиздерине жана SQLге киришүүгө арналган кыска серияны ачат . Көптөгөн программалар маалыматты иштеп чыгуу жана өзгөртүү жана аны жаңыртуу менен алек. Маалыматтар программа логикасынын абдан маанилүү бөлүгү болгондуктан, ал үчүн өзүнчө сактагыч көп бөлүнөт. Андагы маалымат структураланган жана туура иштеп чыгууну жана сактоону камсыз кылуу үчүн атайын эрежелерге баш ийет. Берorштерге жетүү жана өзгөртүү атайын суроо тor - SQL (Structured Query Language) аркылуу жүргүзүлөт.
1-бөлүк. SQLге киришүү - 1
Берorштер базасын башкаруу системасы – бул ар кандай тышкы программалардын маалыматтар жана кошумча кызматтар менен (журналдарды жазуу, калыбына келтирүү, резервдик көчүрүү ж.б.) өз ара аракеттенүүсүн камсыз кылуучу программалык камсыздоо, анын ичинде SQL аркылуу. Башкача айтканда, маалымат жана аны менен иштеген тышкы программалар ортосундагы программалык катмар. Бул бөлүктө биз SQL деген эмне, SQL serverи деген эмне деген суроолорго жооп беребиз жана СБД менен иштешүү үчүн биринчи программаны түзөбүз.

DBMS түрлөрү

Маалыматтарды сактоону уюштуруу ыкмасына жараша DBMS бир нече түрлөрү бар:
  • Иерархиялык. Маалыматтар дарак структурасында уюштурулган. Мисал катары, дисктин тамырынан башталып, андан кийин ар кандай типтеги файлдардын бутактары жана ар кандай уя даражадагы папкалар менен өскөн файл системасы.
  • Network. Иерархиялык модификация, ар бир түйүндө бирден ашык ата-эне болушу мүмкүн.
  • Объектке багытталган. Маалыматтар класстар/an objectтер түрүндө, алардын атрибуттары жана OOP ылайык өз ара аракеттенүү принциптери менен уюштурулган.
  • Реляциялык. Бул типтеги ДББнын маалыматтары tableларда уюштурулган. Таблицалар бири-бири менен байланыштырылышы мүмкүн, алардагы маалымат структураланган.
Бул макалалар сериясында биз H2ди мисал катары колдонуп, реляциялык DBMSлерди (эң кеңири таралгандары катары) карап чыгабыз жана алмашуунун иштешине окшош нерсени нөлдөн баштап тиркемени түзөбүз. Суроо: Эмне үчүн PostgreSQL, MySQL, MSSQL же Oracle эмес? Жооп: Программалардын өзүнчө топтомун орнотуу маселелерине алаксыбоо үчүн. Андан ары конфигурациялоо, маалымат базасын түзүү, ар кандай ОСтерде иштөөнүн татаалдыктары, versionлар. H2 менен иштөө үчүн минималдуу аракеттерди аткаруу керек. Бирок учурдагы H2 JDBCти башка өндүрүүчүдөн реляциялык DBMSге өзгөртүүгө эч нерсе тоскоол болбойт (serverдин дарек сабы жана драйвер классынын аталышы гана өзгөрөт).

SQL

Тышкы программалар маалымат башкаруу тorнде Структураланган сурам тor боюнча СББга суроо жаратат. SQL деген эмне жана ал кадимки программалоо тилдеринен эмнеси менен айырмаланат? SQL өзгөчөлүктөрүнүн бири - декларативдүүлүк. Башкача айтканда, SQL декларативдик тил . Бул буйруктарды киргизүүдө, башкача айтканда, SQL serverине суроо-талаптарды түзүүдө биз кандай жол менен эмес, так эмнени алгыбыз келгенин сүрөттөйбүз дегенди билдирет. Серверге суроо-талап жөнөтүү менен SELECT * FROM CUSTOMER(SQLден орусчага болжолдуу котормосу: “COSTUMER tableсынан тандоо жаса, тандоо tableдагы бардык саптардан турат” ) биз бардык колдонуучулар үчүн маалыматтарды алабыз. Сервер бизди кызыктырган маалыматтарды кантип жана кайдан жүктөгөнү эч кандай мааниге ээ эмес. Эң негизгиси суроо-талапты туура түзүү.
  • SQL Server деген эмне жана ал кантип иштейт? МБС менен өз ара аракеттенүү кардар-server принцибинде ишке ашат. Кээ бир тышкы программалар суроо-талапты SQL тorнде операторлор жана буйруктар түрүндө жөнөтөт, СББЖ аны иштетип, жооп жөнөтөт. Жөнөкөйлүк үчүн, SQL Server = DBMS деп коёлу.
Эгер сиз бир маркадагы машинаны айдай алсаңыз, башкаларды эч кандай көйгөйсүз айдай аласыз. Айдоонун негиздери майда деталдарды эске албаганда, бардык жерде бирдей. Ар кандай өндүрүүчүлөрдүн SQL serverлери үчүн да ушундай - алардын ар биринде SQLдин өзүнүн versionсы бар, бирок ал көрсөтүлгөн стандарттарга жооп берет (SQL92, SQL2003...). Биз SQL92 алкагындагы операторлорду жана буйруктарды колдонобуз. Негизги SQL билдирүүлөрү төмөнкү топторго бөлүнөт:
  • Берorштерди аныктоо тor ( DDL ) – берorштердин аныктамалары. Маалыматтар базасынын структурасын жана анын an objectтерин түзүү;
  • Data Manipulation Language( DML ) – маалыматтар менен иш жүзүндөгү өз ара аракеттенүү: киргизүү, жок кылуу, өзгөртүү жана окуу;
  • Transaction Control Language ( TCL ) – транзакцияларды башкаруу;
  • Берorштерди башкаруу тor ( DCL ) – маалыматтарга жана маалыматтар базасынын структураларына кирүү укуктарын башкаруу.
Бир катар макалаларда биз DMLге өзгөчө көңүл буруп, биринчи үч топту карап чыгабыз.

JDBC

Өткөн кылымдын 80-жылдарында PC XT/AT тибиндеги персоналдык компьютерлер рынокту багындырган. Бул, негизинен, алардын дизайн модулдук менен шартталган. Бул колдонуучу өзүнүн компьютеринин тигил же бул компонентин (процессор, видеокарта, дисктер ж.б.) оңой эле өзгөртө аларын билдирет. Бул кереметтүү касиет ушул күнгө чейин сакталып келет: биз видеокартаны алмаштырып, драйверди жаңыртабыз (кээде ал өзү автоматтык түрдө жаңыртылып турат). Көбүнчө, мындай манипуляциялар менен эч кандай жаман нерсе болбойт, жана учурдагы программалар жаңыртылган система менен кайра орнотуусуз иштей берет. Ушул эле нерсе Javaда DBMS менен иштөөгө да тиешелүү. SQL serverлери менен иштөөнү стандартташтыруу үчүн, аны менен өз ара аракеттенүү бир чекит - JDBC (Java DataBase Connectivity) аркылуу жүргүзүлүшү мүмкүн. Бул DBMS менен иштөө үчүн java.sql пакетинин ишке ашырылышы. Бардык популярдуу SQL serverлеринин өндүрүүчүлөрү алар үчүн JDBC драйверлерин чыгарышат. Төмөнкү диаграмманы карап көрөлү. Колдонмо java.sql класстарынын инстанцияларын колдонот . Андан кийин биз маалыматтарды алуу/өзгөртүү үчүн керектүү буйруктарды өткөрүп беребиз. Андан кийин, java.sql jdbc драйвери аркылуу СББ менен иштешет жана бизге даяр натыйжаны кайтарат. 1-бөлүк. SQLге киришүү - 2 Башка өндүрүүчүдөн DBMSке өтүү үчүн, көбүнчө JDBCди өзгөртүү жана негизги орнотууларды аткаруу жетиштүү. Программанын калган бөлүктөрү өзгөрбөйт.

Биринчи программа

Келгиле, практикалык бөлүгүнө өтөбүз. JetBrains IntelliJ IDEA IDE аркылуу Java долбоорун түзөлү . Белгилей кетсек, Ultimate Edition SQL жана маалымат базалары менен иштөө үчүн сонун куралды камтыйт - Data Grip . Бирок, көпчүлүк колдонуучулар үчүн төлөнөт. Ошентип, бorм берүү максатында биз жалпыга жеткorктүү IntelliJ IDEA Community Edition гана колдоно алабыз . Ошентип:
  1. IDEди ишке киргизиңиз жана жаңы долбоор түзүңүз:
    1-бөлүк. SQLге киришүү - 3

  2. Java долбоорун тандап, SDK versionсын көрсөтүңүз (JDK8 мисалында, бирок бул маанилүү эмес):
    1-бөлүк. SQLге киришүү - 4

  3. Кийинки кадамда консолдук тиркемени түрү катары тандаңыз :
    1-бөлүк. SQLге киришүү - 5

  4. Биз долбоордун атын , пакетин жана анын дисктеги жайгашкан жерин көрсөтөбүз (бул үчүн атайын өзүнчө каталог түздүм):
    1-бөлүк. SQLге киришүү - 6

  5. Келгиле, IDEди бир мүнөткө коюп, www.h2database.com сайтынан H2 DBMS менен иштөө үчүн керектүү JDBC файлын жүктөп алалы (көз карандысыз ZIP платформасын жүктөө):
    1-бөлүк. SQLге киришүү - 7

  6. Жүктөлгөн файлдын ичине киребиз (бизди h2\bin жолундагы jar файлы кызыктырат , ал бизге кийинчерээк керек болот, аны көчүрүп алыңыз):
    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 менен туташып жана ажырата алабыз. Ар бир кадам консолдо чагылдырылат. Сиз СУБДга биринчи жолу кошулганда, stockExchange.mv.db маалымат базасы файлы түзүлөт .

Код талдоо

Чыныгы 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 : Бул жерде биз драйвердин атын аныктадык , аны тапса болот, мисалы, туташкан китепкананы чыкылdateу жана учурдагы долбоордун lib каталогунда анын структурасын кеңейтүү.
  2. DB_URL : Биздин базанын дареги. Эки чекит менен бөлүнгөн маалыматтардан турат:
  3. Protocol=jdbc
  4. Сатуучу (өндүрүүчү/аты) DBMS=h2
  5. МБДнын жайгашкан жери, биздин учурда файлдын жолу (c:/JavaPrj/SQLDemo/db/stockExchange). Тармактык DBMS үчүн бул жерде кошумча түрдө алыскы serverлердин аттары же IP даректери, TCP/UDP порт номерлери жана башкалар көрсөтүлгөн.

Ката иштетүү:

Биздин codeдогу чалуу ыкмалары сиз көңүл бурушуңуз керек болгон каталарды кайтарышы мүмкүн. Бул этапта биз жөн гана консолдо аларды кабарлайбыз. DBMS менен иштөөдө каталар көбүнчө SQLException экенин эске алыңыз .

Операциянын логикасы:

  1. Class.forName (DB_Driver) – тиешелүү JDBC драйвери бар экенине ынанабыз (биз аны мурда жүктөп алып орнотуп алганбыз).
  2. DriverManager.getConnection (DB_URL) – DBMS байланышын түзүү. Өткөрүлгөн даректи колдонуп, JDBC өзү биздин DBMSтин түрүн жана жайгашкан жерин аныктайт жана биз маалымат базасы менен байланышуу үчүн колдоно турган Байланышты кайтарат.
  3. connection.close() – СУБДга байланышты жабуу жана программа менен иштөөнү бүтүрүү.
Сериянын кийинки бөлүгүндө биз DDL операторлору жана SQL маалымат түрлөрү менен таанышабыз, ошондой эле маалымат базабыздын баштапкы структурасын түзүп, аны tableлар менен толтурабыз. Экинчи бөлүк Үчүнчү бөлүк
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION