چگونه از طریق جاوا به یک پایگاه داده MySQL متصل شویم
زبان برنامه نویسی جاوا JDBC (Java DataBase Connectivity) را به عنوان بخشی از کیت توسعه نرم افزار (SDK) جاوا فراهم کرده است. با استفاده از این API امکان اتصال به یک پایگاه داده رابطه‎ای (relational database) بسیار راحت می‎شود و اجرای عملیات رایج از قبیل کوئری گیری، وارد کردن داده، به‎روزرسانی و حذف رکوردها قابل انجام خواهد بود.

با وجودی که هسته JDBC API در خود جاوا تعبیه شده است، اما برای اتصال به یک پایگاه داده خاص مثل MySQL یا SQL Server نیاز به یک بخش اضافی تحت عنوان درایور دیتابیس خواهید داشت. این درایور دیتابیس بخشی از نرم افزار است که فراخوانی‎های هسته JDBC را به فرمت قابل فهم توسط آن پایگاه داده ترجمه می‎کند.

در این مقاله ما به جزئیات مربوط به اتصال به یک پایگاه داده MySQL و نحوه اجرای چند کوئری را بررسی خواهیم کرد.

درایور دیتابیس MySQL

همان‎طور که در بالا اشاره شد برای این که بتوانید به یک پایگاه داده MySQL متصل شوید به درايور JDBC ویژه MySQL نیاز دارید. نام این درایور Connector/J است و می‎توانید آن را از وب‎سایت MySQL  دریافت کنید.

بعد از این که فایل ZIP (یا TAR.GZ) را دانلود کردید، آرشیو را باز کرده و فایل mysql-connector-java–bin.jar را در یک مکان مشخص کپی کنید. این فایل برای اجرای کدهایی که از درایور MySQL JDBC استفاده می‎کند نیاز است.

ساخت یک پایگاه داده ساده

فرض می‎کنیم که شما پایگاه داده MySQL را دانلود کرده‎اید و به طور کامل آن را نصب کرده و به آن دسترسی دارید. برای ادامه کار و انجام کوئری گیری ابتدا باید یک پایگاه داده ساده بسازید. با استفاده از یک کلاینت مورد نظر خود به پایگاه داده متصل شويد و فرمان زير را برای ساخت یک پایگاه داده به نام sample اجرا کنید:

create database sample;
ما برای اتصال به این پایگاه داده به یک نام کاربری و کلمه عبور نیز احتیاج داریم (مگر این که شما تصمیم داشته باشید با حساب مدیریت به آن متصل شوید که اصولا چنین کاری توصیه نمی‎شود).

فرمان زير یک نام کاربری به نام testuser را به پایگاه داده MySQL از طریق ماشین یکسان localhost متصل خواهد کرد که از کلمه عبور securepwd استفاده می‎کند.

create user 'testuser'@'localhost' identified by 'securepwd';

اگر قصد دارید به یک پایگاه داده متصل شوید که روی ماشین دیگری (در مثال ما remotemc) اجرا می‎شود، باید از فرمان زير استفاده کنید (remotemc می‎تواند یک نام میزبان یا آدرس ای‎پی باشد):

create user 'testuser'@'remotemc' identified by 'securepwd';
بعد از این که نام کاربری و کلمه عبور ساخته شد شما باید اجازه دسترسی به پایگاه داده sample که قبلا ساخته بودیم را برای آن صادر کنید:
grant all on sample.* to 'testuser'@'localhost';

یا اگر این پایگاه داده روی ماشین دیگری است:

grant all on sample.* to 'testuser'@'remotemc';
حالا شما باید بتوانيد با استفاده از نام کاربری و کلمه عبور ایجاد شده به این پایگاه داده متصل شويد. شما همچنین می‎توانید بعد از اتصال فرامین زیر را اجرا کنید تا مطمئن شوید تمام مجوزهای لازم به خوبی کار می‎کنند:
create table joe(id int primary key auto_increment, name varchar(25));
drop table joe;

تنظیمات جاوا

در این مرحله ما به جزئیات اتصال به MySQL از طریق جاوا خواهیم پرداخت. اولین مرحله بارگیری درایور دیتابیس است. این کار با استفاده از فرمان زیر در یک مکان مناسب انجام می‎شود:

Class.forName("com.mysql.jdbc.Driver");

این کد می‎‎تواند یک استثنا را نیز اضافه کند:

try {
  Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException ex) {
  // use the exception here
}

خیلی رایج است که این کد را در یک بلوک ایستا درون یک کلاس قرار داد تا اگر درایور قادر به بارگیری نبود برنامه فورا پیام خطا صادر کند.

public class Sample
{
  static {
    try {
      Class.forName("com.mysql.jdbc.Driver");
    } catch(ClassNotFoundException ex) {
      System.err.println("Unable to load MySQL Driver");
    }
  }
}

مسلما برنامه برای این که بتواند درایور را پیدا کند باید با درایور JAR (که در بخش قبل دانلود و استخراج کردیم) ارتباط برقرار کند که مسیر آن به شکل زیر تعریف شده است.

java -cp mysql-connector-java-<version>-bin.jar:... <class to run>

اتصال به MySQL  از طریق جاوا

حالا که ما جزئیات مربوط به بارگیری درايور MySQL از جاوا را پشت سر گذاشتیم، زمان آن رسیده که به پایگاه داده متصل شویم. یکی از روش‎های اتصال استفاده از DriverManager است:

String jdbcUrl = ...;
Connection con = DriverManager.getConnection(jdbcUrl);

jdbcUrl بیانگر جزئیات اتصال شامل سروری که پایگاه داده در آن قرار دارد، نام کاربری و نظاير آن است. در اینجا نمونه URL از مثال ما را مشاهده می‎کنید:

String jdbcUrl = "jdbc:mysql://localhost/sample?user=testuser&password=secrepwd";

توجه داشته باشید كه ما تمام پارامترهای مورد نیاز را وارد کرده‎ایم که شامل نام میزبان (در اینجا localhost)، نام کاربری و کلمه عبور است (استفاده از کلمه عبور به این شکل کار خوبی نیست، در ادامه با روش جایگزین آن آشنا خواهید شد.)

یک برنامه کامل برای بررسی وضعیت اتصال و استفاده از این jdbcUrl به این شكل خواهد بود:

public class Sample
{
  static {
    try {
      Class.forName("com.mysql.jdbc.Driver");
    } catch(ClassNotFoundException ex) {
      System.err.println("Unable to load MySQL Driver");
    }
  }

  static public void main(String[] args) throws Exception
  {
    String jdbcUrl = "jdbc:mysql://localhost/sample?user=testuser&password=securepwd";
    Connection con = DriverManager.getConnection(jdbcUrl);
    System.out.println("Connected!");
    con.close();
  }
}

توجه داشته باشید كه اتصال به پایگاه داده بخش ارزشمندی از یک برنامه است و باید بسته باقی بماند. کد بالا اما به دلیل یک استثنا اتصال را نبسته است. به منظور بستن این اتصال از الگوی زیر استفاده کنید:

try(Connection con = DriverManager.getConnection(jdbcUrl)) {
  System.out.println("Connected!");
}

همان‎طور که در بالا نیز اشاره کردیم اضافه کردن کلمه عبور به آدرس JDBC روش خوبی نیست. برای تعیین مستقیم نام کاربری و کلمه عبور شما می‎توانید از این گزینه جایگزین استفاده کنید:

String jdbcUrl = "jdbc:mysql://localhost/sample";
try(Connection con = DriverManager.getConnection(jdbcUrl, "testuser", "securepwd")) {
}

کوئری گیری از پایگاه داده در جاوا

حالا که اتصال به پایگاه داده برقرار شده است روش انجام کوئری مثل کوئری نسخه دیتابیس را بررسی خواهیم کرد:

select version();

در جاوا یک کوئری به این شكل اجرا می‎شود. یک آبجکت Statement ساخته می‎شود و با استفاده از متد executeQuery() که یک ResultSet را برمی‎گرداند کوئری مورد نظر انجام می‎شود:

String queryString = "select version()";
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery(queryString);

نسخه را از ResultSet به روش زیر چاپ می‎کنیم. 1 نشان دهنده ایندکس ستون نتایج به دست آمده است که از 1 شروع می‎شود:

while ( rset.next()) {
  System.out.println("Version: " + rset.getString(1));
}

بعد از پردازش نتایج، آبجکت باید بسته شود:

rset.close();
stmt.close();

این مراحلی بود که شما برای اتصال به MySQL از جاوا و انجام یک کوئری ساده باید طی کنید.

برچسب: