جستجو برای:
  • خانه
  • مقالات
  • ویدیوهای رایگان
  • رویدادها
  • همکاری با ما
  • تماس با ما
  • info@zerotohero.ir
صفر تا قهرمان
  • خانه
  • مقالات
  • ویدیوهای رایگان
  • رویدادها
  • همکاری با ما
  • تماس با ما
0

ورود و ثبت نام

وبلاگ

صفر تا قهرمان > بلاگ > مقالات > پایگاه داده‌ها > جاوا و MySQL

جاوا و MySQL

فروردین 30, 1396
ارسال شده توسط وحید رجبی
پایگاه داده‌ها ، جاوا
673 بازدید

از سری مقالات آموزش جاوا, مبحث ارتباط با پایگاه داده های MySQL  را برمی‌گزینیم.

همانطور که می‌دانید, پایگاه داده یکی از مهم ترین مباحث در هر پروژه ای است. ذخیره سازی اطلاعات در پایگاه داده, بسیار بهتر از ذخیره سازی در فایل ها و ارتباط مستقیم با فایل ها است. مزیت های آن نیز بر تمام برنامه نویسان آشکار است و بسط این موضوع در قالب این مقاله نمی‌گنجد. در این مقاله می‌خواهیم شیوه اتصال به پایگاه داده و انجام تراکنش با آن را مورد بررسی قرار دهیم. در این مقاله سعی می‌شود علاوه بر کد های جاوا, دستورات مقدماتی SQL نیز توضیح داده شود.

Structured Query Language و یا به اختصار SQL, یک زبان استاندارد است که برای انجام تراکنش با پایگاه داده مورد استفاده قرار می‌گیرد. این زبان در تمام پایگاه داده ها و تمام زبان های برنامه نویسی می‌تواند استفاده شود. به این ترتیب با استفاده از هر زبان برنامه نویسی, می‌توان با هر پایگاه داده ای ارتباط برقرار کرد. در غیر این صورت نیاز بود تا برای هریک از زبان های برنامه نویسی, یکسری دستورات برای ارتباط با هر پایگاه داده در نظر گرفته شود. البته درجاوا, می‌توان با استفاده از ساختار شی گرایی نیز با پایگاه داده ها ارتباط برقرار کرد. JOOQ نمونه ای از ارتباط با پایگاه داده به صورت شی گرایی است. اما استفاده مستقیم از SQL برای تراکنش با پایگاه داده, همچنان مورد استفاده قرار می‌گیرد.

اکنون در قالب مثال هایی ارتباط با پایگاه داده MySQL و همچنین تراکنش با آن را مورد بررسی قرار می‌دهیم. ابتدا باید یک Connector  به برنامه اضافه کنیم.این connector در واقع برای برقراری ارتباط میان پایگاه داده و جاوا استفاده می‌شود. سپس Maven Dependency آن را به پروژه اضافه می‌کنیم:

    <groupId>zerotohero.vhdrjb</groupId>
    <artifactId>Java Mysql</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>

ابتدا یک جدول در MySQL ایجاد می‌کنیم. این جدول مقادیر مربوط به اطلاعات کاربران را در خود نگهداری می‌کند.

CREATE TABLE users (
  code int not NULL ,
  name VARCHAR(45) NULL ,
  location VARCHAR(45) NULL ,
  PRIMARY KEY (code)
)

سپس یک کلاس متناظر با این جدول در جاوا ایجاد می‌کنیم

public class User {
    private String name;
    private int code;
    private String location;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
}

در ابتدا نیاز است تا ارتباط با پایگاه داده را برقرار کنیم. یک کلاس به نام JDBC Handler ایجاد می‌کنیم و در این کلاس تراکنش ها را مدیریت می‌کنیم. در Constructor این کلاس ارتباط با پایگاه داده را برقرار می‌کنیم.

public class JDBCHandler {
    private Connection connection;
   final private static String dbName;
   final private static String username;
   final private static String password;
    final private static String server;
    static {
        dbName = "ZeroToHero";
        username = "";
        password = "";
        server = "";
    }
    public JDBCHandler() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://"+server+"/"+dbName+"?&serverTimezone=UTC&useSSL=false&user="+username+"&password="+password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    private void close() {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ابتدا مقادیر حائز اهمیت برای ارتباط را در متغیر هایی قرار می‌دهیم.  متد forName, یک MySQL Driver را برای برنامه نویس فراهم می‌آورد. سپس یک Connection برای تراکنش با پایگاه داده ایجاد می‌کنیم. متد close در کلاس, Connection ایجاد شده را از بین می‌برد. توجه داشته باشید که بعد از هر تراکنش Connection ایجاد شده را ببنید و برای تراکنش جدید, یک Connection جدید ایجاد کنید.

اولین تراکنش افزودن اطلاعات یک شخص به پایگاه داده است. این دستور با استفاده از کلمه کلیدی Insert Into انجام می‌شود.

insert into users (code, name, location) VALUES (value_code , value_name ,value_location )

users نام جدول است و بعد از آن ستون هایی که باید مقدار دهی شوند را مشخص می‌کنیم. ترتیب این ستون ها بسیار مهم است. در اینجا ابتدا ستون code و سپس ستون name مشخص شده است. در موقع وارد کردن اطلاعات و قرار دادن آن در دستور بالا نیز باید این ترتیب رعایت شود. در غیر این صورت اطلاعات نادرستی به جدول وارد می‌شود.

    public boolean insert(User user) {

        try {
            PreparedStatement statement = connection.prepareStatement("INSERT  INTO users  (code,name,location) values (?,?,?)");
            statement.setInt(1, user.getCode());
            statement.setString(2, user.getName());
            statement.setString(3, user.getLocation());
            statement.executeUpdate();
            close();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return false;
    }

در کد بالا, دستور SQL در یک Prepared Statement قرار داده شده است. علت استفاده از Prepared Statement, تامین امنیت است. اگر با دستورات SQL Injection, که یکی از روش های حمله به پایگاه داده است, آشنا باشید علت استفاده از این کلاس برای شما واضح است. با استفاده از این کلاس, مقادیری که قرار است به پایگاه داده افزوده شوند را با علامت سوال (?) مشخص می‌کنیم و با استفاده از متد های کلاس Prepared Statement مقادیر را به آن اضافه می‌کنیم.این روش ارتباط را نسبت به آسیب پذیری SQL Injection امن می‌کند.  در نهایت با استفاده از متد execute Update دستور را اجرا می‌کنیم و connection را می‌بندیم.

        JDBCHandler jdbcHandler=new JDBCHandler();
        User user = new User();
        user.setCode(10);
        user.setName("Vahid Rajabi");
        user.setLocation("Iran");
        jdbcHandler.insert(user);

دستور بعدی, دستور واکشی اطلاعات است. اطلاعاتی که به پایگاه داده وارد شده اند, باید واکشی و خوانده شوند تا مورد پردازش قرار گیرند. دستور select برای واکشی اطلاعات استفاده می شود.

  SELECT (column1,column2,...) FROM tabel where column1=condition

بعد از کلمه کلیدی Select, ستون هایی که می‌خواهیم مقادیر آن ها را دریافت کنیم را مشخص می‌کنیم. اگر تمام ستون ها را بخواهیم دریافت کنیم, از “*” استفاده می‌شود. سپس نام جدول را مشخص می‌کنیم و با استفاده از کلمه کلیدی Where می‌توان اطلاعاتی که با شرط خاصی همخوانی دارند را دریافت کنیم. تمام قوانین قابل استفاده در دستورات شرطی, در SQL نیز قابل استفاده است.

select * from users WHERE location = "Iran"

اکنون می‌خواهیم این واکشی را با استفاده از کد جاوا انجام دهیم:

    public ArrayList<User> select() {
        ArrayList<User> users = new ArrayList<User>();
        try{
            PreparedStatement statement = connection.prepareStatement("select * from users where location='Iran'");
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                User user=new User();
                user.setCode(resultSet.getInt(resultSet.findColumn("code")));
                user.setLocation(resultSet.getString(resultSet.findColumn("location")));
                user.setName(resultSet.getString(resultSet.findColumn("name")));
                users.add(user);
            }
            close();
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return users;
    }

ابتدا یک لیست از کلاس User ایجاد می‌کنیم که نتیجه جستجو ما را مشخص می‌کند. کد را در کلاس Prepared Statement قرار می‌دهیم و با استفاده از متد execute query دستور را اجرا می‌کنیم.  برای دریافت مقدار هر ستون نیاز است تا شماره آن ستون را در متد های get قرار دهید. اما معمولا برای جلوگیری از اشتباه, شماره ستون را نیز با استفاده از متد find column دریافت می‌کنیم. به این ترتیب نام ستون را در متد find column قرار می‌دهیم و نتیجه را در متد های get استفاده می‌کنیم.

برای بروزرسانی مقادیر در جدول از کلمه کلیدی update استفاده می‌کنیم.

UPDATE table SET column1 = new_value where column2 = condition

اکنون برای انجام تراکنش بروزرسانی, به این صورت عمل می‌کنیم:

    public boolean update() {
        try {
            PreparedStatement statement = connection.prepareStatement("update users set name = ? where code=? ");
            statement.setString(1, "vhdrjb");
            statement.setInt(2, 10);
            statement.executeUpdate();
            close();
            return true;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return false;
    }

و شیوه استفاده از آن نیز مانند متد های قبل است.

برای حذف یک مقدار از پایگاه داده نیز به این صورت عمل می‌کنیم:

delete from table where column = condition

و کد جاوا آن به این صورت است:

    public boolean delete() {
        try {
            PreparedStatement statement = connection.prepareStatement("DELETE FROM users where code = ?");
            statement.setInt(1, 10);
            statement.executeUpdate();
            close();
            return true;
        } catch (SQLException e) {
            System.out.println(e.getMessage());

        }
        return false;
    }

در این مقاله سعی بر این شد تا با استفاده از کد ها جاوا, با پایگاه داده ارتباط برقرار کنیم و تراکنش های مورد نظر را انجام دهیم. بهتر است یک کلاس برای انجام تراکنش ها با پایگاه داده ایجاد  و در پروژه هایتان از آن کلاس واحد استفاده کنید. برای این منظور, متد های این کلاس باید منعطف باشندتا با تمام پایگاه های داده و جداول, با کمترین تغییری در کد ها, ارتباط برقرار کند.

با ما همراه باشید.

اشتراک گذاری:
برچسب ها: databasemysqlsqlپایگاه دادهجاوا

مطالب زیر را حتما مطالعه کنید

از Java به Dart – کلاس و Constructor

آموزش Gradle – اهمیت Project Automation

تفاوت Sequence و List در کاتلین

بهترین محیط های توسعه(IDE) برای جاوا

openClosed

Open/Closed Principle در قوانین Solid

kotlin_fuctions

توابع در زبان برنامه نویسی Kotlin

قدیمی تر edge detection با استفاده از OpenCv
جدیدتر نکاتی مهم برای استفاده درست از آیکون ها در نرم افزار

4 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • profi گفت:
    آبان 23, 1396 در 7:54 ب.ظ

    سلام و خسته نباشید
    ممنون از تمام آموزش هاتون در زمینه کار با جاوا
    در صورت امکان در یک مقاله، مسیر آموزشی که یک تازه وارد باید در یادگیری جاوا داشته باشد رو متصور بشید.
    در مورد کار با sqlite هم کمی توضیح بدید….تشکر

    برای پاسخ دادن وارد شوید
    • وحید رجبی گفت:
      آبان 23, 1396 در 11:26 ب.ظ

      سلام. ممنون از همراهیتون دوست عزیز. برای آموزش جاوا اول باید مبانی برنامه نویسی بدونین که آموزش هاش در این لینک هست :
      https://zerotohero.ir/category/article/academic
      بعد از اون باید شی گرایی در جاوا یاد بگیرین که سری آموزش هاش میتونین از این مقاله شروع کنین:
      https://zerotohero.ir/article/java/%d8%b4%d8%b1%d9%88%d8%b9-%d8%b4%db%8c-%da%af%d8%b1%d8%a7%db%8c%db%8c-oop-%d8%af%d8%b1-%d8%ac%d8%a7%d9%88%d8%a7
      بعد از اون معمولا باید JavaEE شروع کنین که اون رو هم میتونین به صورت سری در دسته مقالات جاوا مطالعه کنین و از این مقاله شروع میشه :
      https://zerotohero.ir/article/java/%d8%b4%d8%b1%d9%88%d8%b9-java-enterprise
      اگر هم موردی هم سوال داشتین میتونین در انجمن مطرح کنین

      برای پاسخ دادن وارد شوید
  • فاضل گفت:
    آبان 12, 1396 در 1:29 ب.ظ

    با سلام
    ممکنه بفرمایید بعد از ساخت یک برنامه دستکاپ به زبان جاوا که با پایگاه داده mySql کار میکنه، چجوری فایل نصبش رو تهیه کنیم که زمانی که در سیستم کاربر دیگر که mySql وجود نداره برنامه اجرا بشه، آیا امکانش هست که mySql رو همراه با فایل نصبی کنیم ؟

    برای پاسخ دادن وارد شوید
    • وحید رجبی گفت:
      آبان 16, 1396 در 10:34 ب.ظ

      سلام دوست عزیز. ممنون از همراهیتون. خیر حتما باید mysql روی سیستم نصب کنین. میتونین برای پایگاه های داده ای که می‌خواین به صورت portable باشه از HSQL استفاده کنین که دیتابیس به صورت فایل در کنار پروژه میسازه.

      برای پاسخ دادن وارد شوید

دیدگاهتان را بنویسید لغو پاسخ

برای نوشتن دیدگاه باید وارد بشوید.

ویژه
جستجو
جستجو برای:
دسته‌ها
  • ANSYS (15)
  • Matlab (14)
  • Photoshop (3)
  • PowerMill (1)
  • Solidworks (11)
  • آکادمیک (55)
  • اخبار (2)
  • اخبار مجموعه (3)
  • امنیت (26)
  • اندروید (108)
  • اینترنت اشیا (9)
  • بازی سازی (5)
  • پایتون (62)
  • پایگاه داده‌ها (10)
  • جاوا (84)
  • جاوا اسکریپت (41)
  • دارت (1)
  • دسته‌بندی نشده (15)
  • سی شارپ (15)
  • شبکه (27)
  • طراحی و توسعه‌ی وب (103)
  • علم داده‌ها (15)
  • گوناگون (17)
  • لینوکس (21)
  • مدیریت (3)
  • مدیریت پروژه (22)
  • مقالات (38)
  • نرم افزارهای مهندسی (41)
  • نظریه بازی‌ها (3)
  • هنرهای دیجیتال (65)
  • هوش مصنوعی و یادگیری ماشین (15)
  • واقعیت ترکیبی (1)
  • واقعیت مجازی (5)
  • ویدیو (34)
درباره صفرتاقهرمان

مجموعه آموزشی صفرتاقهرمان مستقر در مرکز رشد دانشگاه مازندران، از سال 1395 در کنار شماست و برای مخاطبین عزیز تولید محتوای آموزشی می کند.

تماس
  • بابلسر - خیابان پاسداران - سازمان مرکزی دانشگاه مازندران
  • 01132393860
  • info@zerotohero.ir
دسترسی سریع
  • خانه
  • مقالات
  • ویدیوهای رایگان
  • رویدادها
  • همکاری با ما
  • تماس با ما
logo-samandehi
© 2021 صفر تا قهرمان. تمامی حقوق محفوظ است

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت