2014-02-28 78 views
0

我有这样的代码:连接到MySQL

package FirstServlet; 

import java.beans.Statement; 

import java.sql.DriverManager; 
import java.sql.ResultSet; 
import com.mysql.jdbc.ResultSetMetaData; 


public class Codb{ 

    public static void connect() { 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      String url = "jdbc:mysql://" + "localhost:3306/bd1"; 
      String user = "root"; 
      String passwd = "root";     
      Connection conn = (Connection) DriverManager.getConnection(url, user, passwd); 
      java.sql.Statement state =((java.sql.Connection) conn).createStatement(); 
      ResultSet result = ((java.sql.Statement) state).executeQuery("SELECT * FROM consomateur"); 
      ResultSetMetaData resultMeta = (ResultSetMetaData) result.getMetaData(); 
      System.out.println("\n**********************************"); 
      for(int i = 1; i <= resultMeta.getColumnCount(); i++) 
       System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t *"); 
      System.out.println("\n**********************************"); 
      while(result.next()) {   
       for(int i = 1; i <= resultMeta.getColumnCount(); i++) 
       System.out.print("\t" + result.getObject(i).toString() + "\t |"); 
       System.out.println("\n---------------------------------"); 
      } 
      result.close(); 
      } catch (Exception e) { 
      e.printStackTrace(); 
      } 
     return false;  
     } 
} 

当我把它写在main方法中它工作得很好,但是当我把它写在一个新的类,然后再初始化它的主要方法,它不起作用。 我有这些错误。

java.lang.ClassCastException: com.mysql.jdbc.Connection cannot be cast to FirstServlet.Connection 
     at FirstServlet.Connect.connect(Connect.java:23) 
     at FirstServlet.Main.main(Main.java:16) 

这是主类:

package FirstServlet; 


public class Main { 

    public static void main(String[] args) { 
     Connect c = new Connect(); 
     c.connect(); 
    } 
} 

感谢您的probleme确实是类的名字,我也有另外一个问题。 我有这个我创建的servlet的方法,我想要做的是让用户输入一个登录名和一个密码来连接。检查用户名和密码的方法是这样的:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    Codb c = new Codb(); 
     c.connect(); 

     Statement state =conn.createStatement(); 

     ResultSet result = (ResultSet) state.executeQuery("SELECT * FROM consomateur"); 

     ResultSetMetaData resultMeta = (ResultSetMetaData) result.getMetaData(); 


     String us= resultMeta.getColumnName(1); 
     String pass= resultMeta.getColumnName(2); 
String username=us; 
String password=pass; 
String un=request.getParameter("username"); 
String pw=request.getParameter("password"); 
     String msg=" "; 
     if(un.equals(username) && pw.equals(password)){ 
      msg="Hello "+ un + " your login is sucess"; 

     } 
     else{ 
      msg="Hello "+un + " your login is unsucess"; 
     } 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<font siez='6' color=red>"+ msg+ "</font>"); 
     } 

    } 

但是行“Statement state = conn.createStatement();”以红色下划线并且错误是conn无法解决。

+1

这是一个明显的例子,为什么你不应该命名类与JDK类相似。 –

回答

0

因为,您的类名是Connection,在FirstServlet包下。请选择不同的班级名称或使用班级名称。

com.mysql.jdbc.Connection.Connection conn = 
    (com.mysql.jdbc.Connection.Connection) 
     DriverManager.getConnection(url, user, passwd);// Use fully qualified name 

另一点,始终遵循Java的命名约定。 package名称应该是全部较小的字母。

0

因为您有一个Connection作为您的自定义类的名称,它与com.mysql.jdbc.Connection相冲突。这是一行:

Connection conn = (Connection) DriverManager.getConnection(url, user, passwd); 

这里Java不知道它是哪个Connection。因此:

  • 更改您的自定义Connection类的名称(强烈推荐)为某个其他名称。

  • 或更改上面的线是这样的:

    com.mysql.jdbc.Connection.Connection conn = (com.mysql.jdbc.Connection.Connection) DriverManager.getConnection(url, user, passwd);

    但是,这不是做的很好的方式,不推荐