JavaRush /وبلاگ جاوا /Random-FA /بخش 1: مقدمه ای بر SQL
Marat Sadykov
مرحله

بخش 1: مقدمه ای بر SQL

در گروه منتشر شد

JDBC. اتصال یک پایگاه داده و ایجاد یک برنامه کنسول جاوا در IntelliJ IDEA

معرفی

این مقاله مجموعه کوتاهی را باز می کند که به اصول تعامل با پایگاه های داده در جاوا و مقدمه ای بر SQL اختصاص دارد . بسیاری از برنامه ها مشغول پردازش و اصلاح اطلاعات و به روز نگه داشتن آنها هستند. از آنجایی که داده ها بخش بسیار مهمی از منطق برنامه هستند، معمولاً حافظه جداگانه ای برای آن اختصاص داده می شود. اطلاعات موجود در آن ساختار یافته و تابع قوانین خاصی برای اطمینان از پردازش و ذخیره سازی صحیح است. داده ها با استفاده از یک زبان پرس و جو خاص - SQL (زبان پرس و جوی ساختاریافته) قابل دسترسی و تغییر هستند.
قسمت 1. مقدمه ای بر SQL - 1
سیستم مدیریت پایگاه داده نرم افزاری است که تعامل برنامه های خارجی مختلف با داده ها و خدمات اضافی (لاگ، بازیابی، پشتیبان گیری و غیره) از جمله از طریق SQL را تضمین می کند. یعنی یک لایه نرم افزاری بین داده ها و برنامه های خارجی که با آن کار می کنند. در این قسمت به سوالات مربوط به اینکه SQL چیست، سرور SQL چیست و اولین برنامه برای تعامل با DBMS را ایجاد می کنیم، پاسخ خواهیم داد.

انواع DBMS

انواع مختلفی از DBMS بر اساس نحوه سازماندهی ذخیره سازی داده ها وجود دارد:
  • بر اساس سلسله مراتب. داده ها در یک ساختار درختی سازماندهی شده اند. یک مثال یک سیستم فایل است که از ریشه دیسک شروع می شود و سپس با شاخه هایی از فایل های مختلف و پوشه هایی با درجات مختلف تودرتو رشد می کند.
  • شبکه. یک اصلاح سلسله مراتبی، هر گره می تواند بیش از یک والد داشته باشد.
  • شی گرا. داده ها در قالب کلاس ها/اشیاء با ویژگی ها و اصول تعامل آنها بر اساس OOP سازماندهی می شوند.
  • رابطه ای. داده های این نوع DBMS در جداول سازماندهی شده است. جداول را می توان به یکدیگر پیوند داد، اطلاعات موجود در آنها ساختار یافته است.
در این سری از مقالات، DBMS های رابطه ای (به عنوان رایج ترین آنها) را با استفاده از H2 به عنوان مثال بررسی می کنیم و برنامه ای را از ابتدا ایجاد می کنیم که چیزی شبیه به نحوه عملکرد یک صرافی را شبیه سازی می کند. سوال: چرا PostgreSQL، MySQL، MSSQL یا Oracle نه؟ پاسخ: برای اینکه حواس شما را پرت نکند نصب مجموعه ای جداگانه از برنامه ها. پیکربندی بیشتر، ایجاد یک پایگاه داده، پیچیدگی های کار در سیستم عامل های مختلف، نسخه ها. برای کار با H2، باید حداقل اقدامات را انجام دهید. اما هیچ چیز مانع از تغییر H2 JDBC فعلی به یک DBMS رابطه‌ای از یک سازنده دیگر نمی‌شود (فقط خط آدرس سرور و نام کلاس راننده تغییر می‌کند).

SQL

برنامه های خارجی پرس و جوهایی را به DBMS در زبان مدیریت داده ها زبان پرس و جو ساخت یافته تولید می کنند. SQL چیست و چه تفاوتی با زبان های برنامه نویسی معمولی دارد؟ یکی از ویژگی های SQL اعلامی بودن است. یعنی SQL یک زبان اعلامی است . این بدان معنی است که هنگام وارد کردن دستورات، یعنی ایجاد پرس و جو در سرور SQL، ما دقیقاً آنچه را که می خواهیم دریافت کنیم و نه به چه روشی توصیف می کنیم. با ارسال یک درخواست به سرور SELECT * FROM CUSTOMER(ترجمه تقریبی از SQL به روسی: "انتخابی از جدول COSTUMER انجام دهید، انتخاب شامل تمام ردیف های جدول است" )، ما داده هایی را برای همه کاربران دریافت خواهیم کرد. اصلاً مهم نیست که سرور چگونه و از کجا داده های مورد علاقه ما را دانلود و تولید می کند. نکته اصلی این است که درخواست را به درستی فرموله کنید.
  • SQL Server چیست و چگونه کار می کند؟ تعامل با DBMS بر اساس اصل کلاینت-سرور اتفاق می افتد. برخی از برنامه های خارجی درخواستی را در قالب عملگرها و دستورات به زبان SQL ارسال می کنند، DBMS آن را پردازش کرده و پاسخی را ارسال می کند. برای سادگی، اجازه دهید SQL Server = DBMS را فرض کنیم.
اگر بتوانید با یک برند ماشین رانندگی کنید، به احتمال زیاد می توانید بدون هیچ مشکلی دیگران را رانندگی کنید. اصول رانندگی در همه جا یکسان است، به جز جزئیات کوچک. همین امر در مورد سرورهای SQL از سازندگان مختلف صادق است - هر یک از آنها نسخه SQL خود را دارند، اما استانداردهای مشخص شده (SQL92، SQL2003...) را برآورده می کنند. ما از عملگرها و دستورات در چارچوب SQL92 استفاده خواهیم کرد. دستورات اولیه SQL به گروه های زیر تقسیم می شوند:
  • زبان تعریف داده ( DDL ) - تعاریف داده. ایجاد ساختار پایگاه داده و اشیاء آن؛
  • زبان دستکاری داده ها ( DML ) - تعامل واقعی با داده ها: درج، حذف، اصلاح و خواندن.
  • زبان کنترل تراکنش ( TCL ) – مدیریت تراکنش.
  • زبان کنترل داده ( DCL ) - مدیریت حقوق دسترسی به داده ها و ساختارهای پایگاه داده.
در مجموعه ای از مقالات ما به سه گروه اول با توجه ویژه به DML نگاه خواهیم کرد.

JDBC

در دهه 80 قرن گذشته، رایانه های شخصی از نوع PC XT/AT بازار را تسخیر کردند. این تا حد زیادی به دلیل مدولار بودن طراحی آنها بود. این بدان معنی است که کاربر می تواند به راحتی یکی از اجزای رایانه خود (پردازنده، کارت گرافیک، دیسک و غیره) را تغییر دهد. این ویژگی فوق العاده تا به امروز حفظ شده است: ما کارت گرافیک را تغییر می دهیم و درایور را به روز می کنیم (گاهی اوقات حتی خود به خود به روز می شود). در اغلب موارد، هیچ چیز بدی با چنین دستکاری هایی اتفاق نمی افتد و برنامه های موجود بدون نصب مجدد با سیستم به روز شده به کار خود ادامه می دهند. همین امر در مورد کار در جاوا با DBMS نیز صدق می کند. برای استاندارد کردن کار با سرورهای SQL، تعامل با آن را می توان از طریق یک نقطه - JDBC (اتصال پایگاه داده جاوا) انجام داد. این یک پیاده سازی از بسته java.sql برای کار با یک DBMS است. سازندگان همه سرورهای محبوب SQL درایورهای JDBC را برای آنها منتشر می کنند. نمودار زیر را در نظر بگیرید. این برنامه از نمونه هایی از کلاس های java.sql استفاده می کند . سپس دستورات لازم را برای بازیابی/تغییر داده ها ارسال می کنیم. سپس، java.sql از طریق درایور jdbc با DBMS تعامل می‌کند و نتیجه نهایی را به ما برمی‌گرداند. قسمت 1. مقدمه ای بر SQL - 2 برای تغییر به یک DBMS از یک سازنده دیگر، اغلب کافی است JDBC را تغییر دهید و تنظیمات اولیه را انجام دهید. قسمت های باقی مانده برنامه تغییر نمی کند.

برنامه اول

بیایید به بخش عملی آن برویم. بیایید با استفاده از JetBrains IntelliJ IDEA IDE یک پروژه جاوا ایجاد کنیم . توجه داشته باشید که نسخه نهایی حاوی یک ابزار فوق العاده برای کار با SQL و پایگاه داده است - Data Grip . با این حال، برای اکثر کاربران هزینه پرداخت می شود. بنابراین برای اهداف آموزشی ما فقط می‌توانیم از نسخه عمومی IntelliJ IDEA Community Edition استفاده کنیم . بنابراین:
  1. IDE را راه اندازی کنید و یک پروژه جدید ایجاد کنید:
    قسمت 1. مقدمه ای بر SQL - 3

  2. یک پروژه جاوا را انتخاب کنید، نسخه SDK را نشان دهید (در مثال JDK8، اما این مهم نیست):
    قسمت 1. مقدمه ای بر SQL - 4

  3. در مرحله بعد، برنامه کنسول را به عنوان نوع انتخاب کنید :
    قسمت 1. مقدمه ای بر SQL - 5

  4. ما نام پروژه ، بسته و مکان آن را روی دیسک نشان می دهیم (من یک دایرکتوری جداگانه برای این کار ایجاد کردم):
    قسمت 1. مقدمه ای بر SQL - 6

  5. اجازه دهید IDE را برای یک دقیقه کنار بگذاریم و فایل JDBC لازم را برای کار با H2 DBMS (زیپ مستقل از پلتفرم دانلود) از www.h2database.com دانلود کنیم.
    قسمت 1. مقدمه ای بر SQL - 7

  6. به داخل فایل دانلود شده می رویم (ما به فایل jar در مسیر h2\bin علاقه مندیم که بعداً به آن نیاز خواهیم داشت، آن را کپی کنید):
    قسمت 1. مقدمه ای بر SQL - 8

  7. ما به IDE برمی گردیم و دایرکتوری هایی را در ریشه پروژه ایجاد می کنیم: db ، جایی که فایل های دارای داده های DBMS قرار خواهند گرفت. lib – اینجا کتابخانه JDBC JAR است:
    قسمت 1. مقدمه ای بر SQL - 9

  8. فایل jar را از مرحله 6 به دایرکتوری lib منتقل کنید و آن را به عنوان یک کتابخانه به پروژه اضافه کنید:
    قسمت 1: مقدمه ای بر SQL - 10

  9. بیایید نام فایل جاوا را به src/sql/demo به StockExchange.java تغییر دهیم (در صورتی که فراموش کرده باشید، ما قصد داریم یک "اکسچنج" ساده را شبیه سازی کنیم)، محتویات آن را تغییر داده و اجرا کنیم:
    قسمت 1: مقدمه ای بر SQL - 11
اکنون می توانیم به DBMS متصل شده و از آن جدا شویم. هر مرحله در کنسول منعکس می شود. هنگامی که برای اولین بار به DBMS متصل می شوید، یک فایل پایگاه داده stockExchange.mv.db ایجاد می شود .

تجزیه کد

کد واقعی:
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 سرورهای راه دور، شماره پورت TCP/UDP و غیره علاوه بر این در اینجا نشان داده شده است.

خطا در پردازش:

روش های فراخوانی در کد ما ممکن است خطاهایی را برگرداند که باید به آنها توجه کنید. در این مرحله ما به سادگی آنها را در کنسول گزارش می کنیم. توجه داشته باشید که خطاهای هنگام کار با DBMS اغلب SQLException هستند .

منطق عملیات:

  1. Class.forName (DB_Driver) - ما مطمئن می شویم که درایور JDBC مربوطه در دسترس است (که قبلا دانلود و نصب کرده بودیم).
  2. DriverManager.getConnection (DB_URL) - یک اتصال DBMS ایجاد کنید. با استفاده از آدرس ارسال شده، خود JDBC نوع و مکان DBMS ما را تعیین می کند و یک Connection برمی گرداند که می توانیم از آن برای ارتباط با پایگاه داده استفاده کنیم.
  3. Connect.close() – اتصال به DBMS را ببندید و کار با برنامه را تمام کنید.
در قسمت بعدی این مجموعه با عملگرهای DDL و انواع داده های SQL آشنا می شویم و همچنین ساختار اولیه پایگاه داده خود را ایجاد کرده و آن را با جداول پر می کنیم. قسمت دوم قسمت سوم
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION