اتصال به پایگاه داده MySQL با استفاده از زبان جاوا – آموزش گام به گام


در زبان جاوا، قابلیتی با عنوان «اتصال پایگاه داده جاوا» (Java DataBase Connectivity) یا به طور مخفف «JDBC»، به عنوان بخشی از «کیت توسعه نرمافزار» (Software Development Kit) یا اصطلاحاً «SDK» ارائه میشود. با استفاده از این «رابط کاربردی برنامهنویسی» (Application Programming Interface) یا «API»، اتصال به یک پایگاه داده و اجرای عملیات متداولی مانند انجام «کوئری» (Query)، درج اطلاعات، بهروزرسانی و حذف سوابق، بسیار آسان خواهد شد.
با اینکه هسته JDBC API در جاوا قرار دارد، اتصال به یک پایگاه داده بخصوص مانند MySQL یا SQL Server، نیازمند یک مؤلفه اضافی به نام «درایور» (Driver) پایگاه داده خواهد بود. درایور پایگاه داده، یک مؤلفه نرمافزاری است که فراخوانیهای JDBC را به یک فرمت قابل فهم برای پایگاه داده مورد نظر تبدیل میکند. در این مقاله، جزئیات نحوه اتصال به پایگاه داده MySQL و اجرای یک کوئری در آن با استفاده از زبان جاوا را به شما آموزش خواهیم داد.
گام اول: نصب درایور پایگاه داده MySQL
همانطور که در بالا نیز توضیح داده شد، برای اتصال به پایگاه داده MySQL، به درایور JDBC برای MySQL نیاز است. نام این درایور «Connector/J» است و میتوانید آن را از سایت MySQL دانلود کنید.
پس از دانلود فایل در یکی فرمتهای ZIP یا TAR.GZ، محتوای آن را استخراج کرده و فایل «mysql-connector-java–bin.jar» را درون یک محل مناسب کپی کنید. برای اجرای تمام کدهایی که از درایور JDBC استفاده میکنند، وجود این فایل ضروری است.
گام دوم: ایجاد یک پایگاه داده نمونه
پایگاه داده MySQL را دانلود و آن را در یک محل قابل دسترس نصب کنید. اکنون میخواهیم برای استفاده از MySQL به منظور اتصال و اجرای کوئریها، یک پایگاه داده نمونه بسازیم. در ابتدا، باید با استفاده از یک «کلاینت» (Client) دلخواه به پایگاه داده متصل شد و با اجرای دستورات زیر، پایگاه داده نمونه را ایجاد کرد.
create database sample;
علاوه بر این، برای اتصال به پایگاه داده به نام کاربری و کلمه عبور نیاز خواهد بود؛ مگر اینکه بخواهید به عنوان ادمین این ارتباط را برقرار کنید (معمولاً چنین کاری توصیه نمیشود). کد زیر، یک کاربر با نام «testuser» را ایجاد میکند که میتواند با استفاده از کلمه عبور «securepwd» و از طریق ماشینی که پایگاه داده MySQL در آن اجرا میشود (localhost)، اتصال را برقرار کند.
create user 'testuser'@'localhost' identified by 'securepwd';
اگر قصد دارید به پایگاه دادهای متصل شوید که در یک ماشین دیگر (remotemc) اجرا میشود، باید از کد زیر استفاده کنید (عبارت remotemc میتواند نام یک سرویس میزبان یا یک آدرس آیپی باشد):
create user 'testuser'@'remotemc' identified by 'securepwd';
پس از ایجاد نام کاربری و کلمه عبور، باید مجوز دسترسی به این پایگاه داده نمونه اعطا شود.
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");
احتمال به وجود آمدن خطای «exeption» در این کد وجود دارد. از اینرو، اگر مشکلی با آن ندارید، میتوانید با استفاده از دستور «catch» و مانند کد زیر آن را نادیده بگیرید.
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>
<version> نسخه MySQL و <class to run> نام کلاس اجرای دستور است.
گام چهارم: اتصال MySQL از طریق جاوا
اکنون که جزئیات بارگذاری درایور MySQL از طریق جاوا توضیح داده شد، اتصال به پایگاه داده را انجام میدهیم. یکی از روشهای ساخت اتصال دهنده، استفاده از متد «DriveManager» است.
String jdbcUrl = ...; Connection con = DriverManager.getConnection(jdbcUrl);
«jdbcUrl» در این کد، جزئیات اتصال از قبیل سرور (جایی که پایگاه داده قرار گرفته است)، نام کاربری و غیره را مشخص میکند. رشته زیر، نمونهای از یک URL برای مثال بالا را نشان میدهد.
String jdbcUrl = "jdbc:mysql://localhost/sample?user=testuser&password=secrepwd";
توجه داشته باشید که همه پارامترهای مورد نیاز برای اتصال از جمله نام میزبانی (در اینجا localhost)، نام کاربری و کلمه عبور در این URL آورده شده است.
آوردن کلمه عبور به این شکل، کار مناسبی نیست. در انتهای این بخش، روش جایگزین و مناسب برای این کار را توضیح خواهیم داد. با استفاده از 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(); } }
توجه داشته باشید که اتصال پایگاه داده، منبع باارزشی محسوب میشود و باید مانند مثال بالا، به خوبی بسته شود. اگرچه در صورت وجود exeption، کد بالا بسته نخواهد شد. به منظور بستن اتصال در شرایط عادی یا غیر عادی، از الگوی زیر استفاده کنید:
try(Connection con = DriverManager.getConnection(jdbcUrl)) { System.out.println("Connected!"); }
همانطور که در بالا نیز اشاره شد، قرار دادن کلمه عبور در URL مربوط به 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، به صورت زیر خروجی بگیرید:
while ( rset.next()) { System.out.println("Version: " + rset.getString(1)); }
عدد 1 در این کد، نشان دهنده اندیس ستون در نتایج است که از 1 شروع میشود. بعد از پردازش نتیجه، آبجکتها باید به صورت زیر بسته شوند:
rset.close(); stmt.close();
مراحل بالا، تمام موارد مورد نیاز برای اتصال MySQL از طریق جاوا و اجرای یک کوئری ساده را پوشش میدهند.
^^
اگر این کارا ها را همه اش را انجام دهیم بازم دیتابس کنکت نشود در اینجا مشکل چیست