الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Access to MySQL using Java Servlet?

مغلقمُجاب
بدأه h.shehari في 4 أبريل 2013 · 4 رد · 1,482 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أولا لم اعرف في قسم اضع هذا السؤال (جافا او XML او MySQL)، فارجو نقله للقسم المناسب

المشكلة عندي اني احاول بناء تطبيق ويب يعتمد على ال Servlet ولكن لم اتمكن من الوصول الى قاعدة البيانات MySQL
 

  • اسم قاعدة البيانات test
  • اسم الجدول test
  • قمت باضافة ال Connector الخاص ب MySQL الى ال Libraries
  • استخدم JDK 1.7, NetBeans 7.3, MySQL 5.6, Tomcat 7.0, Connector/J 5.1.24

1- ال form action في صفحة الانترنت sign_up.jsp

<form action="RegisterUser" method="post">
    <td><input type="submit" value="Submit"></td>
</form>

 

2- ملف السيرفلت RegisterUser.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

@WebServlet(urlPatterns = {"/RegisterUser"})
public class RegisterUser extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, SQLException {

    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan3";
        int phone = 123456;

        String insert = "INSERT INTO test VALUES ('\" + name + \"', \" + phone + \")";

        s.executeUpdate(insert);

        s.close();
        con.close();

    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

 

3- نتيجة الexception

HTTP Status 500 - Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

type Exception report

message Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

description The server encountered an internal error that prevented it from fulfilling this request.

exception
java.lang.SecurityException: Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test
    RegisterUser.processRequest(RegisterUser.java:66)
    RegisterUser.doPost(RegisterUser.java:173)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.39 logs.

 

4- المشكلة تحدث فقط عندما احاول الاتصال ضمن مشروع WEB باستخدام الServlet، لكن عند استخدام نفس الكود ضمن تطبيق جافا بدون Servlet فانه يعمل بشكل طبيعي وهذا الكود مره اخرى يعمل دون اية مشاكل:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Test {
    public static void main(String[] args){
    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan4";
        int phone = 8985895;

        String insert = "INSERT INTO test VALUES ('" + name + "', " + phone + ")";

        s.executeUpdate(insert);

        s.close();
        con.close();
        System.out.println("done");
    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}}

 

 

استخدام نفس الكود دون تغيير يعمل على تطبيق جافا لكن لا يعمل مع الServlet

وشكرا مقدما على الردود..

تم تعديل هذه المشاركة بواسطة h.shehari في 4 أبريل 2013 في 03:43

#2

ضع ملف الـjar الخاص بمحرك mysql في مجلد اسمه lib تحت WEB-INF:

\WEB-INF\lib\mysql-connector-java-*-bin.jar
#3
Mr.B كتب:

ضع ملف الـjar الخاص بمحرك mysql في مجلد اسمه lib تحت WEB-INF:

 

\WEB-INF\lib\mysql-connector-java-*-bin.jar

 

 

جربت وضعه في مسار 

\WEB-INF\lib

 

وايضا جربت مره اخرى ان يكون في المسار

C:\Program Files\Java\jdk1.7.0_15\jre\lib\ext

 

 

لا اعتقد ان هناك مشكلة في مسألة الربط من خلال مكتبة Connector لانه وكما اخبرتكم في الموضوع ان الكود يعمل بشكل سليم على اي تطبيق جافا وجربت انشاء ملف test.java ضمن نفس المشروع مع دالة main وعمل بشكل سليم

اعتقد ان المشكلة وكما يظهر في الException في دالة doGet ضمن ملف السيرفلت RegisterUser.java لكن لم اعرف ما الخطأ فيها خاصة وان هذه الطريقه طبقتها بناء على عدة فيديوهات تعليمية من عدة اشخاص على اليوتيوب وكلهم يستخدمون نفس الطريقة ونفس الخطوات

تم تعديل هذه المشاركة بواسطة h.shehari في 4 أبريل 2013 في 05:21

#4 أفضل إجابة

المشكلة ليست من doGet بل تحميل محرك mysql، تأكّد مرة أخرى من وضع ملف الـjar المسار السابق وحمّله بوضع:

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

قبل:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
1
#5

المشكلة اعتقد كما قال أخي Mr.B تكمن في ملف الجار حاول تطبيق الاعدادت التي كتبها لك في رده الاخير وان شاء الله يمشي الحال

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


هذا الموضوع مغلق.

مواضيع مشابهة