اجرای دستورات بر روی بانک

بعد از برقراری ارتباط با بانک، نوبت به ارسال دستورات SQL به آن می رسد. برای این منظور سه رابط وجود دارند که دارای متدها و خواص مفیدی هستند که شما را قادر می سازند دستورات را به بانک ارسال کرده و نتایج حاصل از آنها را دریافت و پردازش کنید. در جدول زیر اسم این رابط ها و کاربرد آنها ذکر شده است :

رابط کاربرد
Statement برای اجرای دستورات ساده SQL به کار می رود.
PreparedStatement برای اجرای دستورات SQL به صورت پویا یا دینامیک به کار می رود. یا به نوعی می توان گفت که برای اجرای دستوراتی از SQL به کار می رود که در زمان اجرا پارامتر دریافت می کنند.
CallableStatement در هنگام کار با رویه های ذخیره شده یا stored procedures به کار می رود. این رابط هم می تواند در زمان اجرا پارامتر قبول کند.

قبل از استفاده از هریک از رابط های بالا باید یک شیء از آنها ایجاد و نتایج حاصل از یک متد از رابط Connection را در داخل آن قرار داد. کدهای زیر نحوه ایجاد شیء از این رابط ها و فراخوانی متدهای رابط Connection مربوط به هریک از آنها نمایش داده شده است :

Statement statement = connection.createStatement();

PreparedStatement preparedstatement = connection.prepareStatement();

CallableStatement callablestatement = connection.prepareCall();

 

رابط Statement

همانطور که در بالا اشاره شد قبل از استفاده از رابط Statement باید متد ()createStatement از رابط Connection را فراخوانی کنید :

Statement statement = connection.createStatement();

زمانیکه یک شیء از رابط Statement ایجاد کردید می توانید دستورات SQL را با استفاده از سه متد زیر اجرا کنید :

متد نوع برگشتی توضیح
()execute boolean اگر مقدار برگشتی از این متد true باشد یعنی شیء ResultSet می تواند به دست بیاید، در غیر اینصورت مقدار false را بر می گرداند.

(در مورد شیء ResultSet در درس آینده توضیح می دهیم)

()executeUpdate int تعداد سطرهایی را که تحت تاثیر دستور SQL قرار گرفته اند را بر می گرداند. مثلا تعداد سطرهایی از دیتابیس را که DELETE، INSERT و یا UPDATE شده اند را بر می گرداند.
()executeQuery ResultSet از این متد معمولا برای اجرای دستور INSERT استفاده می شود و نتایج را به صورت یک شیء ResultSet بر می گرداند. این شی نماینده سطرهای برگشت داده شده، حاصل از دستور SELECT است که در درس بعد درباره آن توضیح می دهیم.

رابط PreparedStatement

رابط PreparedStatement از رابط Statement ارث بری می کند و این توانایی را به شما می دهد که در زمان اجرای برنامه پارامترهایی را برای تکمیل دستور SQL ارسال کنید. قبل از استفاده از رابط Statement باید متد ()prepareStatement از رابط Connection را فراخوانی کنید :

try 
{
    String SQL = "Update Students SET Age = ? WHERE StudentID = ?";
    PreparedStatement preparedstatement = connection.prepareStatement(SQL);
    //some code
}
catch (SQLException e) 
{
    //some code
}

همانطور که در کد بالا مشاهده می کنید دستور SQL دارای علامت های ? می باشد. این علامت های سوال با مقادیر یا پارامترهایی که ما ارسال می کنیم جایگزین می شوند. هر کدام از این علامت ها دارای یک اندیس می باشند. مثلا اولین علامت سوال دارای اندیس 1، دومین علامت دارای اندیس 2 و … می باشد. ارسال پارامترها با استفاده از متدهایی از رابط PreparedStatement که به صورت ()setXXX هستند، صورت می گیرد، که XXX نوع داده ای که قرار است توسط متد ارسال شود را نشان می دهد. مثلا برای ارسال یک پارامتر از نوع اعداد صحیح از متد ()setInt استفاده می شود. در زیر لیست این متدها ذکر شده است :

متد کاربرد
setInt(int paramIndex, int value) یک مقدار صحیح را جایگزین علامت ؟ می کند.
setString(int paramIndex, String value) یک مقدار رشته ای را جایگزین علامت ؟ می کند.
setFloat(int paramIndex, float value) یک مقدار float را جایگزین علامت ؟ می کند.
setDouble(int paramIndex, double value) یک مقدار double را جایگزین علامت ؟ می کند.

همانطور که مشاهده می کنید، این متدها دو پارامتر دریافت می کنن که اولین پارامتر اندیس علامت سوال و دومین پارامتر مقداری که قرار است به جای علامت سوال قرار بگیرد، می باشد. از آنجاییکه رابط PreparedStatement از رابط Statement ارث بری می کند، در نتیجه می تواند از متدهای آن یعنی ()execute(), executeQuery و ()executeUpdate برای اجرای دستورات بر روی بانک هم استفاده کند. کد ابتدای درس را به صورت زیر کامل تر می کنیم :

try 
{
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());

    String url= "jdbc:mysql://localhost:3306/university?user=root&password=";
    Connection connection = DriverManager.getConnection(url);

    Statement statement = connection.createStatement();
    statement.executeQuery("SELECT * FROM Students");
    
    //some code
} 
catch (Exception ex) 
{
    System.out.println(ex.getMessage());
}

در مورد رابط CallableStatement در درس های آینده به طور کامل توضیح می دهیم.