كيفية تثبيت برنامج تشغيل JDBC في Eclipse Web Project دون مواجهة java.lang.classnotfoundexception

StackOverflow https://stackoverflow.com/questions/2353141

سؤال

هناك سؤال مشابه جدًا بالنسبة لي ولكن في حالتي ، ليس لدي أي جرار مكررة في مسار البناء الخاص بي ، وبالتالي فإن الحل لا يعمل بالنسبة لي. لقد بحثت عن Google لبضع ساعات الآن ، لكن لم يكن هناك أي من الحلول التي وجدتها هناك بالفعل حل مشكلتي. أقوم بإنشاء موقع ويب مع بعض اتصال قاعدة البيانات للواجب المنزلي. أنا أستخدم قاعدة بيانات MySQL ، وأتطور في Eclipse وتشغيلها على Windows.

ما زلت أحصل java.lang.ClassNotFoundException: com.mysql.jdbc.Driver مع الكود التالي:

import java.sql.*;
//...
public void someMethodInMyServlet(PrintWriter out)
{
    Connection connection = null;
    PreparedStatement query = null;
    try {

        out.println("Create the driver instance.<br>");
        Class.forName("com.mysql.jdbc.Driver").newInstance();

        out.println("Get the connection.<br>");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
        query = connection.prepareStatement( "SELECT * FROM customers");

        //...
    } catch (Exception e)
    {
        out.println(e.toString()+"<br>");
    }
}
//...

عندما أقوم بتشغيل الرمز أعلاه ، أحصل على الإخراج التالي:

Create the driver instance.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

لا يتجاوز Class.forName... الخط ولا يمكنني معرفة السبب! هذا ما فعلته:

  1. قم بتنزيل MySQL-Connector.
  2. ضعه في مجلد MySQL الخاص بي C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar.
  3. فتحت خصائص المشروع في Eclipse.
  4. أضف جرة خارجية إلى مسار البناء الخاص بي واخترت mysql-connector-java-5.1.12-bin.jar.

في كل مرة أحاول فيها استخدام Servlet ، أحصل على نفس الخطأ بغض النظر عما إذا كان لديّ الجرة هناك أو إذا لم أفعل. هل يمكنك مساعدتي في معرفة هذا؟

هل كانت مفيدة؟

المحلول

بالنسبة إلى كل مكتبة "الطرف الثالث" في نكهة ملف جرة يتم استخدام /WEB-INF/lib. سيكون متاحًا بعد ذلك في ClassPath الافتراضي لـ WebApp. أيضا ، Eclipse ذكية بما يكفي لتلاحظ ذلك. لا حاجة إلى المتاعب مع BuildPath. ومع ذلك ، تأكد من إزالة جميع المراجع غير الضرورية التي أضفتها من قبل ، وإلا فقد تصطدم.

البديل هو تثبيته في الخادم نفسه عن طريق إسقاط ملف الجرة الفعلية في الخادم /lib مجلد. هذا مطلوب عند استخدام مصدر بيانات تجمع اتصال JDBC المقدم من الخادم والذي بدوره يحتاج إلى برنامج تشغيل MySQL JDBC.

أنظر أيضا:

نصائح أخرى

بما أنك تديرها في servlet, ، تحتاج إلى الوصول إلى الجرة من قبل حاوية servlet. يمكنك إما تضمين الموصل كجزء من تطبيقك war أو ضعها كجزء من مكتبة Servlet Contener الممتدة وإدارة مصدر البيانات ، إذا كانت تحتوي على واحدة. الجزء الثاني يعتمد تمامًا على الحاوية التي لديك.

الآخرون محقون في إتاحة جرة السائق لحاوية Servlet الخاصة بك. كان من المفترض أن يقترح تعليقي أن تتحقق من سطر الأوامر ما إذا كان السائق نفسه سليماً.

بدلا من فارغة main(), ، جرب شيئًا كهذا ، مقتبسًا من الوثائق المشمولة:

public class LoadDriver {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
    }
}

على منصتي ، سأفعل هذا:

$ ls mysql-connector-java-5.1.12-bin.jar 
mysql-connector-java-5.1.12-bin.jar
$ javac LoadDriver.java 
$ java -cp mysql-connector-java-5.1.12-bin.jar:. LoadDriver

على النظام الأساسي الخاص بك ، تحتاج إلى استخدام ; كمفاصل للمسار ، كما تمت مناقشته هنا و هنا.

ضع mysql-connector-java-5.1.6-bin.jar إلى مجلد Apache Tomcat 6.0.18 lib. سوف تحل مشكلتك.

فقط اتبع هذه الخطوات:

1) تثبيت الكسوف
2) استيراد apache إلى Eclipse
3) تثبيت mySQL
4) تنزيل mysqlconnector/j
5) قم بفك ضغط الملف المضغوط عبره حتى تحصل على ملف bin فيه. ثم ضع جميع الملفات الموجودة في المجلد الذي يحتوي على bin to c: program files mysql mysql server5.1/ ثم أعط نفس المسار مثل العنوان أثناء تحديد برنامج التشغيل في Eclipse.

هذا كل شيء سهل للغاية.

ما يجب ألا تفعله (خاصة عند العمل في مشروع مشترك)

حسنًا ، بعد أن واجهت نفس المشكلة وبعد قراءة بعض الإجابات هنا وأماكن أخرى. يبدو أن وضع external lib داخل WEB-INF/lib ليست هذه الفكرة الجيدة pollute webapp/JRE libs with server-specific libraries - لمزيد من المعلومات ، تحقق من هذه الإجابة "

حل آخر لا أوصي به هو: لنسخه إلى مجلد Tomcat/Lib. على الرغم من أن هذا قد يعمل ، سيكون من الصعب إدارة التبعية لمشروع مشترك (GIT على سبيل المثال).

حل جيد 1

خلق vendor مجلد. ضع هناك كل ما تبذلونه من lib الخارجي. ثم ، قم بتخطيط هذا المجلد كاعتماد على مشروعك. في Eclipse تحتاج إلى

  1. أضف المجلد الخاص بك إلى build path
    1. Project Properties -> Java build path
    2. Libraries -> أضف lib خارجي أو أي حل آخر لإضافة ملفاتك/مجلدك
  2. أضف مسار البناء الخاص بك إلى deployment Assembly (المرجعي)
    1. Project Properties -> Deployment Assembly
    2. Add -> Java Build Path Entries
    3. يجب أن ترى الآن قائمة المكتبات على مسار البناء الخاص بك والتي يمكنك تحديدها لإدراجها في حربك النهائية.
    4. حدد تلك التي تريدها واضغط على النهاية.

حل جيد 2

يستخدم maven (أو أي بديل) لإدارة تبعية المشروع

إذا كانت المشكلة لا تزال قائمة ،

ضع جرة mysql-connector-java-5.0.8-bin في مكان داخل مجلد tomcat-> lib-> (بغض النظر عن المكان الذي قمت بتثبيته Tomcat). وتغيير المتغير البيئي الخاص بك (يتم بالنقر فوق خصائص MyComputer-إعدادات النظام المتقدمة-المتغيرات البيئية-وتعيين اسم متغير وقيم متغير جديد كمكان يتواجد فيه ملف lib الخاص بك. )

إذا كانت المشكلة لا تزال قائمة ، فحاول تنزيل Commons-Collections-2.0.jar (http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html) ولصق الجرة في نفس المكان الذي توجد فيه جرة mysql (أي) داخل Tomcat-Lib.

قم بتنظيف المشروع الخاص بك خادمك- حاول أخيرًا التشغيل.

في كثير من الأحيان كنت أواجه هذه المشكلة ، واجهت classnotfoundException. إذا لم تكن جرة في الموقع المادي.

لذا تأكد من ملف .jar (موصل MySQL) في الموقع الفعلي لمجلد LIB على الويب. وتأكد من إعادة تشغيل Tomcat باستخدام أمر إيقاف التشغيل في CMD. يجب أن تعمل.

الحل الوحيد الذي عمل بالنسبة لي هو وضع ملف .jar ضمن الويب-Inf/lib. أتمنى أن يساعد هذا.

على افتراض أن مشروعك يعتمد على Maven ، أضفه إلى POM الخاص بك:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

حفظ> بناء> واختبار الاتصال مرة أخرى. إنها تعمل! قد يختلف إصدار موصل MySQL Java الفعلي.

ضع mysql-connector-java-5.1.38-bin.jar إلى C: Program Files Apache Foundation Tomcat 7.0 lib.

كانت مشكلتي مختلفة بعض الشيء. بدلاً من jdbc:oracle:thin:@server:port/service كان لدي server:port/service.

كان مفقود jdbc:oracle:thin:@ في url ميزة في GlobalnamingResources.Resource. لكنني أغفلت استثناء Tomcat

java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'

لهذا الخطأ:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

تحتاج إلى:

Import java.sql.*;
Import com.mysql.jdbc.Driver;

حتى لو لم يتم استخدامه حتى يعمل التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top