java web development 6 කොටස - DB handling

J Sparrow

Well-known member
  • Jan 8, 2012
    1,603
    698
    113
    127.0.0.1
    ඕං ආවා lesson 6 අරගෙන. පොඩි කරදර වගයක් උනා. ඒකයි late උනේ. :sorry:
    මම කලින් කියපු විදියටම, අද කරන්න බලාපොරොත්තු වෙන්නේ අපේ project එකට database එකක් connect කරන්න.

    5th
    lesson එකේදී කිව්වා වගේ

    1 - MySQL server
    2 - MySQL-administrator
    3 - MySQL-query-browser


    ටික install කරගන්න ඇති කියලා හිතනවා. :rolleyes:

    හරි! මේ තියෙන්නේ මම install කරගත්ත ටික.

    tHORpm3.png


    මේ?

    uapiyjv.png


    MySQL server එක windows service එකක් විදියට දැනටමත් run වෙනවා. :yes:

    අපි මුලින්ම පොඩි database එකක් හදමු.

    MySQL-administrator එක open කරපල්ලකෝ.

    S0hey1p.png


    ඔය Server host කියන තැනට localhost කියලා දීපල්ලා, port එක වෙනස් කරන්න යන්න එපා. ඒක තමයි default port එක.

    ඊට පස්සේ username, password ඉල්ලන තැනට මේක install කරගද්දි දුන්න username, password දාලා OK කලාම මෙන්න මේ වගේ MySQL-administrator එකට අපිට log වෙන්න පුළුවන්.

    eLEY0x6.png


    හරි! ඒ Basics! වැඩේට බහිමු බොලව්! :dull:

    අපි මුලින්ම schema එකක් හදන්න ඕනේ.
    ** ඒ කියන්නේ මේ schema එකක් ඇතුලේ තමයි අපේ project එක related database tables තියෙන්නේ.

    දැන් ඔය left panel එකේ තියෙන Catalogs කියන node එක click කරපල්ලා.
    ඊට පස්සේ පහලින් බොලාට පෙනෙයි දැනට තියෙන default schemes ටික.


    d98D3iz.png


    දැන් ඒ schemes තියෙන පැත්තෙන් right click කලා --> Create New Schema

    7yGvaVy.png


    හරි! අපි දැන් මේකට නමක් දෙන්න ඕනේ බොලව්!
    හැමදාම බොලාට Student management systems හදලා, Library systems හදලා එපා වෙලා ඇතිනේ? අපි හදමු contacts management system එකක්!
    complex නෑ simple and easy!

    ඔන්න මම නම දෙනවා contacts කියලා.


    2xiofx2.png


    දැක්කනේ?

    ඊට පස්සේ OK ඔබපල්ලා! ඕන්න add උනා.


    UZx3l4D.png


    දැන් contacts උඩ double click කරපියව්

    Cnhf9J1.png


    Create Table button එක click කරන්න පුතාලා!

    6mlIexH.png


    දැන් එන wizard එකට ඔන්න ඔය විදියට අපි table fields ටික දාගන්නවා.

    දැනට ඔය තියෙන field settings ඔහොම්මම apply කරගන්න.


    ** ලොකු දෙයක් නෑ! උඹලට අත පත ගාලා මේ වැඩේ කරගන්න පුළුවන්. :yes:

    after that, click on "Apply changes" button බොලව්!


    l821ZuH.png


    Da faq is that? :angry:

    පුතාලා, ගණන් ගන්න එපා Execute ඔබන්න.

    ** ඔය පෙන්නන්නේ අපි apply කරපු fields වලට අදාලව user table එක create කරන්න execute කරන්න ඕනේ SQL statement එක.


    CD8upba.png


    ඔන්න add උනා.


    ** දැනට මේකේ (user table) data මොනවත් නෑ හොඳේ? ඔය පේනවානේ? Row count එක 0.

    අපි දැන් මේකට data add කරන්නයි යන්නේ. හරි ළමායි! දැන් MySQL-query-browser open කරන්න.
    4uA2Umk.png


    ඔව්! කලින් වගේම තමයි!

    VIZNi3o.png


    ඔහොම මගුලක් එයි! ඔය tick එක දාල OK කරපල්ලා.

    85fo42A.png


    ඕන්න ආවා!
    පේනවානේ අපෙ schema එක and table එක තියෙනවා? ;)


    එහෙනම් දැන් මේකට මම fake data ටිකක් දානවා.

    RBNqdki.png


    ඔන්න හරිනේ?

    ** ඔය row cell එකක් උඩ click කරලා F2 ඔබපුවාම edit mode එකට එනවා! Data insert කරලා, ඊට පස්සේ ඔය පහාලම තියෙන Apply changes button එක click කරලා changes apply කරන්න.

    Okay! දැන් අපිට data තියෙනවා! :cool:

    පොඩි login page එකක් හදලා userව verify කරගෙන අපි එයාව (userව) user page එකට redirect කරන්නයි දැන් යන්නේ.

    පොඩි පොඩි වෙනස්කම් කීපයක් කරලා මම අපේ සුපුරුදු project එකම මේකට use කරනවා!
    දන්නවනේ, බොලාලා අළුත්ම project එකක් කරගෙන මෙව්වා කලොත් තමයි හොඳ!


    ඔන්න දැන් තමයි වැඩේට බහින්නේ!

    මුලින්ම මම login.jsp එක දාගන්නවා simple login form එකකුත් එක්ක.


    දන්නවනේ? WebContent folder එක ඇතුලටයි login.jsp එක ඔබා ගන්න ඕනේ! (කට්ටියට jsp pages හදන හැටි මතක ඇති කියලා හිතනවා)

    **මම මේකට පොඩි CSS පාරක් දාලා ලස්සන කරලා ගන්නවා. ;)

    aplfMlR.png


    ඔය පේනවනේ? මම blue color එකෙන් box කරලා තියෙන්නේ external css file එකක්.

    * මම අලුත් servlet එකක් හදා ගන්නවා, login කියලා ඒක තමයි ඔය form එකේ action එකට දීලා තියෙන්නේ. (red color එකෙන් box කරලා තියෙන්නේ ? )

    * මතකද මන්දා, අපි කලින් පාර form එක submit කලේ get method එකෙන්? දැන් කරන්නේ post method එකෙන්. ඒ දෙකේ වෙනස දන්නවා ඇති කියලා හිතනවා.

    * ${error} කියලා attribute එකකුත් define කරලා තියෙනවා පේනවා ඇතිනේ? මේකෙන් වෙන දේ ඉස්සරහට බලන්න පුළුවන්.

    හොඳායි! දැන් web.xml එක open කරලා මම ඒකේ welcome file එකට set කරනවා අපේ login.jsp page එක. දැන් ඒක තමයි උදේ පාන්දරම project එක run කලාම එන්නේ.

    මේ..


    xBbics7.png


    ඔන්න මම server එක up කරලා project එක run කරනවා.

    rcXhhOt.png


    apply කරපු styles ටිකත් එක්ක ඔය විදියට තමයි login.jsp එක display වෙන්නේ. :yes:

    ඊළඟට login action handle කරන්න මම අලුත් servlet එකක් හදා ගන්නවා.
    ඔව්! පරණ package එක ඇතුලෙම තමයි! කලින් පාර හැදුවා වගේම servlet එකක්.


    cbEKng9.png


    පේනවනේ?
    ** අපි කලින් use කලේ doGet() method එක. දැන් use කරන්නේ doPost() method එක.
    ඇයි? මතක නැද්ද තොපිට? අපි කලින් form එක submit කලේ get method එකෙන්. (form එකෙ method එකක් define කලේ නැත්තන් by default ගන්නේ get method එක)
    දැන් submit කරන්නේ post method එකෙන්.

    ** ඒ ඒ බනිස් වලට ඒ ඒ කෙසෙල් theoryය මේ අවස්ථාවේදී apply වන බව තරයේ සිත තබා ගනිව්!! :angry:

    9XDc59S.png


    ඔන්න ඔහොමයි දැන් folder structure එක පේන්න තියෙන්නේ.
    ** ඔය එහෙන් මෙහෙන් පේන පරණ project එකේ කෑලි ගැන හිතන්න එපා!

    දැන් මම මේ අලුත් servlet එක map කරගන්නවා web.xml එකේ!

    QWUIprO.png


    අහ්! මතකයිනේ? මම කිව්වා මේකට නම දෙන්නේ login කියලා?

    ඊළඟට අපි database connection එකක් හදා ගන්න ඕනේ! නැත්තන් user inputs validate කරන්න බෑනේ?

    මේ ටික අපි code කරන්නේ Login class එක ඇතුලේ!

    ** අමතකම උනා යකුනේ! අපිට මේකට jar file එකක් ඕනේ වෙනවා! (mysql-connector-java.jar) ඒක නැතුව ඉතින් හුකෑස් තමයි! :sorry:

    ඔන්න තියෙනවා jar file link එක! එතනින් ඒක download කරගන්න

    http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.36

    හරි! දැන් ඕක අපේ project එකට දාගන්න හැටි මම කියලා දෙන්නම්! ඊට පස්සේම coding වලට බහිමු.

    project එක උඩ right click කලා -- > Properties

    xTfK7zm.png


    Okay! then, ඔය left panel එකේ තියෙන Java Build Path කියන node එක select කරලා, Libraries කියන tab එක click කරන්න.

    ZavuA1X.png


    ඊට පස්සේ Add External JARS.. button එක click කරලා එන browser window එකෙන් , mysql-connector-java.jar එක brows කරලා select කරලා OK කරන්න.

    ඔන්න add උනා! :yes:

    ZE4MDom.png


    Okay! coding වලට බහිමු.

    මෙන්න තියෙනවා full method implementation එක. :love:

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try{
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    // Initializing the JDBC driver
    Class.forName("com.mysql.jdbc.Driver");

    // Setting up the connection
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/contacts","root", "root");

    // SQL query to select the user
    String query = "SELECT * FROM user WHERE username = '"+username+"' and password = '"+password+"'";

    // create the java statement
    Statement st = connection.createStatement();

    // execute the query, and get a java resultset
    ResultSet rs = st.executeQuery(query);

    // If there is such user
    if (rs.next()){
    request.setAttribute("username", username);
    request.getRequestDispatcher("user").forward(request, response);
    return;

    } else{ // If there is no such user
    request.setAttribute("error", "Username or password is incorrect!");
    }

    // Eventually releases the Statement object's database and JDBC resources
    st.close();

    } catch (ClassNotFoundException e) {
    request.setAttribute("error", "No MySQL JDBC driver found");
    } catch (SQLException e) {
    request.setAttribute("error","Connection Failed!");
    } catch(Exception exception){
    request.setAttribute("error","An error occurred!");
    }

    request.getRequestDispatcher("login.jsp").forward(request, response);
    }


    වැදගත්ම lines ටික මම explain කරන්නම්! අනිත් ඒවා comments බලලා තෙරුම් ගන්න පුළුවන්.

    මේ තියෙන්නේ database එකට connection එක හදා ගන්න විදිය.

    0O4vVy2.png



    Statement st = connection.createStatement();


    ** SQL statements run කරගන්නයි, ඒ අදාල SQL statement එක run කලාම එන result set එක බලාගන්නයි තමයි මේක use කරන්නේ.

    ResultSet rs = st.executeQuery(query);

    ** පේනවනේ? අර කලින් declair කරපු Statement object එක use කරලා තමයි මෙතන ResultSet කියන object එක initialize කරලා තියෙන්නේ.



    if (rs.next()){
    request.setAttribute("username", username);
    request.getRequestDispatcher("user").forward(request, response);
    return;

    } else{ // If there is no such user
    request.setAttribute("error", "Username or password is incorrect!");
    }


    ** rs.next() කියන method එකෙන් කරන්නේ අපිට st.executeQuery(query) කියන method එක execute කලාම return වෙන result set එකේ
    (මෙතන result set එක කියලා කියන්නේ ඇත්තටම අපි ලිව්ව SQL statement එකට අදාල data ටික) row එකෙන් row එක තියෙනවාද බල බල loop කරන එක.
    (data තියෙනවා නම් true කියලා return වෙනවා නැත්තන් false කියලා return වෙනවා)
    මෙතනදී අපි දුන්න SQL statement එකට අදාලව තියෙන්නේ එක result set එකයි. ඒ කියන්නේ එක row එකයි.


    request.setAttribute("username", username);

    ** මේ කරලා තියෙන එක දැනටමත් උඹලා දන්නවා. අපි අපේ relevant jsp file එකට send කරන්නයි මේ username කියන attribute එක හදාගෙන ඒකට අපේ username එක assign කරගෙන තියෙන්නේ

    request.getRequestDispatcher("user").forward(request, response);

    මේ කරලා තියෙන එකත් දැනටමත් උඹලා දන්නවා. මේ අපි කලින් පාර lesson එකේදී කලා වගේම log වෙන userව එයාගේ user page එකට redirect කරලා තියෙන්නේ.
    ** හැබැයි username and passwords correct නම් විතරයි


    else{ // If there is no such user
    request.setAttribute("error", "Username or password is incorrect!");
    }


    ** comment එකෙන්ම පේනවනේ? අපි දුන්න username and password වලට අදාලව user කෙනෙක් නැත්තන්, අපි error කියලා attribute එකක් හදල proper error message එකක් දෙනවා මේ data වලට අදාලව user කෙනෙක් නෑ කියලා

    ඊට පස්සේ අපි වඩාත් වැදගත්ම exceptions ටික handle කරගෙන තියෙනවා. මේවා ගැන උඹලම ටිකක් හොයලා බැලුවොතින් තමයි හොඳ!

    catch (ClassNotFoundException e) {
    request.setAttribute("error", "No MySQL JDBC driver found");
    } catch (SQLException e) {
    request.setAttribute("error","Connection Failed!");
    } catch(Exception exception){
    request.setAttribute("error","An error occurred!");
    }


    ** පේනවානේ ඒ ඒ exceptions වලට අදාලව වෙනම වෙනම error attributes දාලා තියෙන හැටි?

    හරි! එහෙනම් ඔන්න අපි මේක දැන් run කරන්නයි යන්නේ. server එක එහෙම start කරලා ගමු! :yes:

    හරි! username and password දැම්මා signin button එක එබුවා!

    Myv2Wvf.png


    ට' *කෙයි කිව්වලු! :angry::angry::angry:

    x4Y9Kw6.png


    මේ මොකද්ද මේ?

    හරි කලබල වෙන්න එපා, ඕක ඔහොම වෙන බව මම දැනගෙන හිටියා.

    ** ඔය error message එක දිහා හොඳට බැලුවොතින් පෙනෙයි, ඔය error message එක generate වෙලා තියෙන්නේ exception එකක් fire උන හින්දා කියලා.
    ඔව්! ClassNotFoundExceptionඑක තමයි. :yes:

    දැන් මෙහෙමයි fire නිවන්නේ. :rofl::D

    මම මුලින්ම ඕක ඔහොම වෙන්න හේතුව කියන්නම්.

    java program එකක time stages දෙකක් තියෙනවා.

    1 - Compile time
    2 - Run time


    ඒ කියන්නේ, අපේ code එක මුලින්ම compile වෙනවා, ඊට පස්සේ තමයි run වෙන්නේ.
    Server එක run කරනවා කියලා කියන්නේ tomcat මල්ලිව up කරනවා විතරක්ම නෙමෙයි. එයා (IDE) ඒ වෙලාවට අපේ project එකේ තියෙන java files එහෙමත් compile කරගන්නවා.

    compile කරගද්දී compile errors පැන්නොත් අපේ project එක up කරන්නෙත් නෑ. :no:
    ඒ කියන්නේ localhost:8080/HelloWorld/ කියලා ගැහුවට එන්නේ 404 තමයි. ඒ කියන්නේ ඉතින් බොලව් හුකෑස්! :P (not found තමයි)


    අපේ project එකේ compile errors තිබුනොත් tomcat මල්ලී බොහෝ දුරට up වෙන්නේ නෑ. and අනික compile errors තිබුනොත් අපේ IDE එකේ හරි ලස්සනට ඒ ටික පෙන්නනවා.

    දැන් මෙතනදී අපේ IDE එකේ compile errors පෙන්නන්නෙත් නෑ, tomcat මල්ලිත් up උනා අව්ලක් නැතුව, project එකත් up උනා.
    ** ඒ කියන්නේ මෙතන තියෙන්නේ Run time අව්ලක්. :yes:


    හේතුව තමයි, මෙයා MySQL එකට connection එක හදාගන්න යද්දී බලනවා මේකට connection එක හදාගන්න ක්‍රමයක් කොහේ හරි කියලා තියෙනවද කියලා.

    ඔව්නේ! අපි කියලා තියෙනවා.
    මේ.? :cool:


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

    ඊට පස්සේ මෙයා යනවා අන්න ඒ Driver කියන class file එක හොයාගෙන.

    tomcat මල්ලී refer කරන external class files (jar files) තියෙන තැන හරිම වෙනස්.
    STS ලොක්කා වගේ නෙමෙයි! මතකයිනේ? අපි STS ලොක්කට, external jar file එකක් විදියට mysql-connector-java.jar file එක include කලා අපේ project එකට?


    ඒත් අපි tomcat මල්ලිට mysql-connector jar එක introduce කලාද? නෑ නේ බොලව්? :angry:

    STS ලොක්කට mysql-connector-java.jar file එක introduce කරපු හින්දා ඌ අව්ලක් නැතුව compile කරලා tomcat මල්ලිට දෙනවා ""ආහ් run කරපන් දැන්"" කියලා, ඒත් tomcat මල්ලී jar files refer කරන තැන mysql-connector-java.jar file එක නෑ. :no:


    හරි! jar file එක නැත්තන් ඉතින් jar file එක දාමු! :D

    මුලින්ම tomcat stop කරන්න ඕනේ.

    ඊට පස්සේ tomcat home එකේ තියෙන lib folder එක ඇතුලට අර mysql-connector-java.jar file එක copy කරන්න

    මෙන්න මේ වගේ

    qDZtgdj.png


    ඕක කියලා දෙන්නේ නැතුව ගියානම් ඉස්සරහට ගොඩක් කරදර වෙන්න වෙනවා errors හොයාගන්න ගියාම :yes:

    දැන් අයෙමත් server එක up කරලා ගමු.
    ඊට පස්සේ username password දීලා sign in වෙන්න.

    ඔන්න හරි!


    ZiSH1x5.png


    බොරු username password දීලත් බලපල්ලා. :yes::rofl:

    ඉතින්, අද තවත් වැදම වැදගත් lesson එකක් කලා. :cool: අපි ටික ටික ඉස්සරහට යනවා. Next lesson එකේදී මම කරන්න බලාපොරොත්තු වෙන්නේ JSTL (JSP Standard Tag Libraries) ගැන. චුට්ටක් internet එකේ බලලා ලෑස්ති වෙලා ඉඳහල්ලා.

    අදත් ගොඩක් දේවල් ඉගෙන ගත්තනේ. එහෙනම් හැමෝටම ජය! :love:

    අහ්! මෙන්න අනිත් lessons ටික.

    java web development පළමු කොටස
    java web development දෙවෙනි කොටස - Application server එක configure කරමු.
    java web development 3 කොටස - IDE එක configure කරමු
    java web development 4 කොටස - simple java web project
    java web development 5 කොටස - JSP

    හරි! එහෙනම් next lesson එකෙන් හම්බෙමු!

    මේකට උඹලගේ කැපවීම අනිවාර්යයි! මට පුලුවන් බොලාට මඟ පෙන්නන්න විතරයි! ;)
     

    rhn123

    Well-known member
  • Jul 20, 2012
    759
    37
    48
    Job ekak hoyana dawas wala tutorial hoya hoya math baluwa.Thanks a lot machan...... Godaaaak pin sidda wenawa :)
     

    u_make_me_sick_

    Well-known member
  • Oct 1, 2011
    11,522
    7,320
    113
    J.Sparrow, puthe, podi awul tikak thiyanawa, eewa mula indalama hadagena yamu neda?
    1. css file eka login css kiyala thiyenne, api eeka rename karamuda wena name ekakata, neththam eka eka page ekata wena wenama css hadanna wenawa.
    2. Ey servlet eken direct db call karanne, not a good idea. api connection eka ganna eka class ekak use karamu neda? and login eka servlet eke karanne nethuwa manager class ekak dala karamuda? view ekata business logic ganna eka ee tharam anumatha karanna be.
     

    Sry.com

    Well-known member
  • Sep 5, 2014
    3,476
    927
    113
    localhost
    You must spread some Reputation around before giving it to J Sparrow again.

    ගොඩක් වටින නූලක් මචන්...දිගටම කරගෙන යමු:yes::yes::yes:
     

    J Sparrow

    Well-known member
  • Jan 8, 2012
    1,603
    698
    113
    127.0.0.1
    J.Sparrow, puthe, podi awul tikak thiyanawa, eewa mula indalama hadagena yamu neda?
    1. css file eka login css kiyala thiyenne, api eeka rename karamuda wena name ekakata, neththam eka eka page ekata wena wenama css hadanna wenawa.
    2. Ey servlet eken direct db call karanne, not a good idea. api connection eka ganna eka class ekak use karamu neda? and login eka servlet eke karanne nethuwa manager class ekak dala karamuda? view ekata business logic ganna eka ee tharam anumatha karanna be.

    aniwa machoo.
    mama login.css kiyala name kale login page ekata witarak hadapu hinda machan.
    api kohomath issarahadi DAO and DAOImpl layers use karanawa db cll karanna.:yes:

    Kattiyatama idea ekak denna one hindai mulinma me widiyata kale. mokada ban matath mulinma layers anam manam tiyenwa dakiddi pissu haduna. wewlanna gatta :P me mona magulda me kiyala.

    Api issarahata Util class liyala, meeka layer karalama gamu. dan kattiyatama basic idea ekak tiyenawane mokadda wenne kiyala.

    mage adu paadu pennala deepalla mee wage. :love:
     

    J Sparrow

    Well-known member
  • Jan 8, 2012
    1,603
    698
    113
    127.0.0.1
    Niyamai Saho... Keep up the Good work.. :)

    Ela ela machan, digatama karagena yanna :D


    Job ekak hoyana dawas wala tutorial hoya hoya math baluwa.Thanks a lot machan...... Godaaaak pin sidda wenawa :)




    You must spread some Reputation around before giving it to J Sparrow again.

    ගොඩක් වටින නූලක් මචන්...දිගටම කරගෙන යමු:yes::yes::yes:

    elakiri mcnn

    Thanks machanlaaaa :love::love::love: :cool: tika tika issarahata yamu kattiyama