2010-06-14 177 views
0

我從我的代碼中收到cannot find symbol錯誤。有誰知道什麼會導致這個問題?使用Class.forName()時出現「找不到符號」問題()

的代碼是:

// Register JDBC driver 
Class.forName("net.sourceforge.jtds.jdbc.Driver"); 

和誤差輸出爲:

blah.java:314: cannot find symbol 
symbol : method forName(java.lang.String) 
location: class java.lang.Class 
       Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
        ^
1 error 

//STEP 1. Import required packages 
import java.sql.*; 

public class JDBCExample { 
    // JDBC driver name and database URL 
    static final String JDBC_DRIVER = "com.sql.jdbc.Driver"; 

    static final String DB_URL = (":jdbc:jtds:sqlserver://localhost:1433/tempdb"); 





    // Database credentials 
    static final String USER = "username"; 
    static final String PASS = "password"; 

    public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    try{ 
     //STEP 2: Register JDBC driver 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 

     //STEP 3: Open a connection 

     System.out.println("Connecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     //STEP 4: Execute a query 
     System.out.println("Creating database..."); 
     stmt = conn.createStatement(); 

     String sql = "CREATE DATABASE "; 
     stmt.executeUpdate(sql); 
     System.out.println("Database created successfully..."); 
    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
     if(stmt!=null) 
      stmt.close(); 
     }catch(SQLException se2){ 
     }// nothing we can do 
     try{ 
     if(conn!=null) 
      conn.close(); 
     }catch(SQLException se){ 
     se.printStackTrace(); 
     }//end finally try 
    }//end try 
    System.out.println("Goodbye"); 
}//end main 
}//end JDBCExample 
+2

請提出問題,請不要只發布錯誤消息。 – luke 2010-06-14 03:51:17

+0

@joseph,我試圖清理這個問題,使它更加負責任。如果我錯誤地改變了意圖,請告訴我。我猜測你真的在使用GWT嗎? – paxdiablo 2010-06-14 04:02:09

+0

@paxdiablo:這個問題已經過度地編輯了。你能否改回它來反映第一個Class.forName ...是代碼的事實,並且從method ... onward開始的所有內容都是編譯器錯誤輸出? – 2010-06-14 04:51:52

回答

2

其中Class.forName()可以失敗不具有上可用的JDBC驅動的主要方法類路徑,但這將是一個運行時錯誤,而不是編譯時錯誤,因爲您似乎在這裏。

使用我的心理調試能力,我想你可能會使用GWT。我不相信它允許在客戶端(它被轉換爲JavaScript)。所有JDBC的東西都要留在服務器端。 Google自己發佈JRE emulation reference,這樣你就可以看到允許的內容。

Class支持的方法不限於:

  • desiredAssertionStatus()
  • getEnumConstants()
  • 的getName()
  • getSuperclass之類()
  • IsArray的()
  • isEnum ()
  • isInterface()
  • isPrimitive()
  • 的toString()

如果我說得對,你使用GWT的事實,它可能是最好使用GWT-RPC客戶端和服務器之間的交談,並有服務器本身發出JDBC調用。

如果您需要關於GWT-RPC的更多信息,請參閱here。 GWT新聞組中有一個thread,您可以閱讀其中的更多信息。

0

可能出現這樣的情況:您在同一個包中有一個名爲「Class.java」的類。在這種情況下,它將忽略「Class.java」 in java.lang包。由於您未在「Class.java」中實施名爲「forName()」的方法,因此會引發此錯誤。

當我遇到類似的編譯時錯誤時,我想到了它。

相關問題