Проблема «Не удается найти символ» при использовании Class.forName () - PullRequest
0 голосов
/ 14 июня 2010

Я получаю ошибку cannot find symbol из своего кода.Кто-нибудь знает, что может вызвать эту проблему?

Код:

// 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 ]

2 голосов
/ 14 июня 2010

Основной причиной, по которой Class.forName() может произойти сбой, является отсутствие драйверов JDBC на пути к классам, но это будет ошибка времени выполнения, а не ошибка времени компиляции, как вы, похоже, получаете здесь.

Используя мои способности к психической отладке, я думаю, что вы, возможно, используете GWT.Я не верю, что это позволяет на стороне клиента (где он конвертируется в JavaScript).Все вещи JDBC должны оставаться на стороне сервера.Сами Google публикует ссылку на эмуляцию JRE , чтобы вы могли видеть, что разрешено.

Поддерживаемые методы Class ограничены:

  • wantedAssertionStatus ()
  • getEnumConstants ()
  • getName ()
  • getSuperclass ()
  • isArray ()
  • isEnum ()
  • isInterface ()
  • isPrimitive ()
  • toString ()

Если я прав насчет того, что вы используете GWT, вероятно, лучше всего использовать GWT-RPC для связи между клиентом и сервером и сам сервер должен выполнять вызовы JDBC.

Если вам нужна дополнительная информация о GWT-RPC, см. здесь .В группе новостей GWT есть ветка , которую вы можете прочитать для получения дополнительной информации.

0 голосов
/ 29 мая 2016

Может быть сценарий, когда у вас есть класс с именем "Class.java" в том же пакете. В этом случае он игнорирует "Class.java" в java.lang . Поскольку вы не реализовали метод с именем "forName ()" в вашем "Class.java" , он выдает эту ошибку.

Мне пришло в голову, когда я получил похожую ошибку во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...