2009-12-10 74 views
-1

我有我的數據庫包中的這兩個類:(DBManager和TaskManager類) 和我創建一個新的對象在我的主框架是在另一個包中,我也導入數據庫包對於我的主框架,我在我的對象上調用了addBirth(),並且我想在MySQL的table =「birthsql」中插入這些參數,但是我發現這個異常並且寫入了「SERVER = NULL」。使用MySQL和數據庫,並有ClassNotFoundException

創建一個對象 - > TaskManager tm = new TaskManager(); 對我的對象調用addBirth()方法 - >,tm.addBirth(3,「Neda」,「Rahmani」,「Mansour」,「Sima」,「December」,「Tehran」);

我的任務管理器類:

public class TaskManager { 
private int BirthID = 2; 
Logger logger = Logger.getLogger(this.getClass().getName()); 
private Connection conn = DBManager.getConnection(); 

public int getID() 
{ 
    return BirthID++; 
} 

public void addBirth(int BirthID, String name, String family, String fatherName, String motherName, String DateOfBirth, String PlaceOfBirth) { 
    try { 
     Statement stm = conn.createStatement(); 

     stm.executeUpdate("INSERT INTO birthsql (name," + "family," + "fatherName," + "motherName," + "DateOfBirth, " + "PlaceOfBirth)" + "VALUES (" + BirthID + ", '" + name + "', '" + family + "', '" + fatherName + "', '" + DateOfBirth + "', '" + PlaceOfBirth + "')"); 
    } catch (SQLException ex) { 
     Logger.getLogger(TaskManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 


}} 

我DBManager類:

public class DBManager { 

private static Logger log = Logger.getLogger(DBManager.class.getName()); 
private static Connection connection = null; 
private final static String DB_URL = "jdbc:mysql://localhost:3306/assignment_2"; 
private final static String DB_USERID = "root"; 
private final static String DB_PASSWORD = "123"; 

public static Connection getConnection() 
{ 
    if (connection == null) 
    { 
     try { 
      /* Your code here */ 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(DB_URL, DB_USERID, DB_PASSWORD); 
     } catch (SQLException ex) { 
      Logger.Dec 10, 2009 6:44:05 AM database.DBManager getConnection 

     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    return connection; 
}} 

堆棧跟蹤:

Dec 10, 2009 6:44:05 AM database.DBManager getConnection 
SEVERE: null 
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at database.DBManager.getConnection(DBManager.java:32) 
    at database.TaskManager.<init>(TaskManager.java:21) 
    at adminFrame.AdminFrame.<init>(AdminFrame.java:29) 
    at adminFrame.AdminFrame$4.run(AdminFrame.java:239) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at database.TaskManager.addBirth(TaskManager.java:30) 
    at adminFrame.AdminFrame.<init>(AdminFrame.java:46) 
    at adminFrame.AdminFrame$4.run(AdminFrame.java:239) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121 
+1

你得到了什麼異常(stacktrace,請)? – Thilo 2009-12-10 03:10:00

+0

-1 - @Johanna - 您一直在使用Java ...和SO ...足夠長的時間,以至於不再需要提醒您包含堆棧跟蹤和相關行號。讓你的行爲一起好友! – 2009-12-10 03:16:05

+0

你在哪裏運行代碼?你怎麼知道它在你的類路徑中? – 2009-12-10 04:24:34

回答

1

你有你的類路徑中的MySQL JDBC驅動程序jar?

+0

我已經添加了它,但是我仍然有這個例外(使用此堆棧跟蹤) – Johanna 2009-12-10 03:24:13

+0

您可能已將它們添加到錯誤的地方。該例外明確指出MySQL驅動程序類未找到。 – Thilo 2009-12-10 03:33:20

+0

你的類路徑中顯然沒有他們,約翰娜,或者你不會得到那個異常。 – delfuego 2009-12-10 03:48:55

0

如果您有MySQL JAR,請確保它們在類路徑中。如果你不這樣做,請下載它們here

2

僅僅因爲你的代碼編譯並且可以開始運行並不意味着你的類路徑中包含了所有必需的東西。代碼編譯是因爲您使用的是內置於Java語言分發中的基本JDBC接口,但在運行時,JDBC會嘗試實例化MySQL特定的連接器,並且不能(Class.forName調用)。它看起來像你的類路徑中缺少一個jar。你可以在這裏取得一:

http://dev.mysql.com/downloads/connector/j/5.1.html

2

我添加的驅動程序JAR在我的類路徑

你以爲你這樣做是正確的,但是JVM是告訴你,你沒有。

你是怎麼做到的?正確的方法是而不是 CLASSPATH環境變量。 JVM,IDE和應用服務器都忽略它。

正確的做法取決於你如何運行你的應用程序。

如果您在命令行上運行,請使用-cp選項並提供MySQL Connector-J JAR的完整路徑。

如果您使用IntelliJ或Eclipse等IDE,則必須知道如何將MySQL驅動程序JAR添加到構建庫路徑。

如果您正在創建一個Web應用程序,您應該將它放在應用程序的WEB-INF/lib目錄中,或者更好的是放在您的應用程序服務器的/ lib目錄中。

最重要的是,相信錯誤信息。你做錯了。找出正確的方法。

UPDATE:貌似的1878405.

+2

+1 - @Johanna需要學習閱讀異常信息,注意他/她的問題的答案,並最終開始解決他/她自己的問題。 – 2009-12-10 04:49:02

0

重複不知道how to set CLASSPATH你不能編寫Java。

如果您使用IntelliJ或Eclipse等IDE,則必須將JAR添加到構建庫路徑中。

如果您使用的是應用服務器,則應將其放入WEB-INF/lib或更好的應用服務器的/ lib目錄中。

+0

我不知道應用程序服務器的/ lib目錄是否優於WEB-INF/lib。它打破了Web應用程序應該是自包含的前提,並且在某些情況下會創建類可見性問題(但JDBC驅動程序應該沒問題)。 – Thilo 2009-12-10 05:24:45

+0

我同意你對自給自足的讚揚。 Tomcat 6建議將JDBC JARs放入/ lib中。 – duffymo 2009-12-10 13:25:20