آموزش اتصال به پایگاه داده با جاوا
در این مقاله ما به جزئیات مربوط به اتصال جاوا به پایگاه داده را نقد و برسی میکنیم.
درایور دیتابیس 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 به روش زیر چاپ میکنیم. ۱ نشان دهنده ایندکس ستون نتایج به دست آمده است که از ۱ شروع میشود:
while ( rset.next()) { System.out.println("Version: " + rset.getString(1)); }
بعد از پردازش نتایج، آبجکت باید بسته شود:
rset.close(); stmt.close();
این مراحلی بود که شما برای اتصال به MySQL از جاوا و انجام یک کوئری ساده باید طی کنید.