Java &引用;找不到符号“;使用Class.forName()时出现问题

Java &引用;找不到符号“;使用Class.forName()时出现问题,java,Java,我的代码中出现找不到符号错误。有人知道是什么导致了这个问题吗 代码是: // 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.

我的代码中出现
找不到符号
错误。有人知道是什么导致了这个问题吗

代码是:

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


Class.forName()
失败的主要原因是类路径上没有可用的JDBC驱动程序,但这将是一个运行时错误,而不是编译时错误

使用我的心灵调试能力,我想你可能在使用GWT。我认为它不允许在客户端(在客户端,它被转换为JavaScript)实现这一点。所有JDBC的东西都必须留在服务器端。谷歌自己发布的,所以你可以看到什么是允许的

Class
支持的方法限于:

  • desiredAssertionStatus()
  • getEnumConstants()
  • getName()
  • getSuperclass()
  • isArray()
  • isEnum()
  • i接口()
  • isPrimitive()
  • toString()
如果我对使用GWT这一事实的看法是正确的,那么最好使用GWT-RPC在客户机和服务器之间进行对话,并让服务器本身发出JDBC调用


如果需要有关GWT-RPC的更多信息,请参阅。GWT新闻组中有一个错误,您可以阅读它以了解更多信息。

类.forName()
失败的主要方式是类路径上没有可用的JDBC驱动程序,但这将是一个运行时错误,而不是您在这里看到的编译时错误

使用我的心灵调试能力,我想你可能在使用GWT。我认为它不允许在客户端(在客户端,它被转换为JavaScript)实现这一点。所有JDBC的东西都必须留在服务器端。谷歌自己发布的,所以你可以看到什么是允许的

Class
支持的方法限于:

  • desiredAssertionStatus()
  • getEnumConstants()
  • getName()
  • getSuperclass()
  • isArray()
  • isEnum()
  • i接口()
  • isPrimitive()
  • toString()
如果我对使用GWT这一事实的看法是正确的,那么最好使用GWT-RPC在客户机和服务器之间进行对话,并让服务器本身发出JDBC调用


如果需要有关GWT-RPC的更多信息,请参阅。GWT新闻组中有一个名为“class.java”的类,您可以阅读该类以了解更多信息。

在同一个包中可能有一个名为“class.java”的类。在这种情况下,它会忽略java.lang包中的“Class.java”。因为您没有在“Class.java”中实现名为“forName()”的方法,所以它会抛出此错误


当我遇到一个类似的编译时错误时,我想到了这一点。

可能有一个场景,在同一个包中有一个名为“class.java”的类。在这种情况下,它会忽略java.lang包中的“Class.java”。因为您没有在“Class.java”中实现名为“forName()”的方法,所以它会抛出此错误


当我遇到类似的编译时错误时,我突然想到了这一点。

请提问,不要只是发布错误消息。@joseph,我试图澄清这个问题以使其更易于回答。如果我错误地改变了意图,请告诉我。你真的像我猜测的那样使用GWT吗?@paxdiablo:这个问题被过度编辑了。你能不能把它改回去,以反映第一个Class.forName。。。是代码,还有从方法。。。编译器错误输出是向前的吗?我看到结尾处缺少双引号.Class.forName(“net.sourceforge.jtds.jdbc.Driver”);好的,bods,在检查javac实际输出的缺少的方法后,我改变了它以反映您的评论-我特别喜欢微妙的“过度编辑”评论:-)希望现在这更接近原始意图。如果你能确认,@joseph,那就好了。请问一个问题,不要只是发一条错误消息。@joseph,我试图澄清这个问题,让它更容易回答。如果我错误地改变了意图,请告诉我。你真的像我猜测的那样使用GWT吗?@paxdiablo:这个问题被过度编辑了。你能不能把它改回去,以反映第一个Class.forName。。。是代码,还有从方法。。。编译器错误输出是向前的吗?我看到结尾处缺少双引号.Class.forName(“net.sourceforge.jtds.jdbc.Driver”);好的,bods,在检查javac实际输出的缺少的方法后,我改变了它以反映您的评论-我特别喜欢微妙的“过度编辑”评论:-)希望现在这更接近原始意图。如果你能证实,约瑟夫,那就好了。
//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