Class 连接对象的转换异常

Class Cast Exception for Connection Object

我正在尝试为 MySQL 建立连接,但遇到了 class 转换异常。这是代码。密码、用户名等已更改,但这不是问题所在。主要问题是 Class Cast Exception 当我尝试做

Connection c = (Connection) DriverManager.getConnection(url,un,pw);

代码

import java.sql.DriverManager;
import java.sql.SQLException;


 public class Connection {
    public static void main(String agrs[]){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://hostname/dbname";
            String un = "username";
            String pw = "password";
            Connection c = (Connection)   DriverManager.getConnection(url,un,pw);
         } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
public class Connection 

问题就在这里。 Class歧义问题。重命名您的 class,并修复您的导入以包含 java.sql.Connection.

DriverManager.getConnection(url,un,pw);return一个java.sql.Connection。 所以你必须改成

java.sql.Connection c = DriverManager.getConnection(url,un,pw);

return 值不是您的连接实例 class。

DriverManager.getConnection() returns 的连接是 java.sql.Connection 的一个实例,但看到您定义了一个单独的连接 class 并认为它是唯一的。原来,它已经是java.sql.Connection定义的标准class。

如果您对 Connection 使用导入,那么在具有相同名称的 classes 之间会发生冲突。将您的 class 重命名为 MyConnection 和 import java.sql.Connection 然后您的代码将起作用。

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;

 public class MyConnection {
    public static void main(String agrs[]){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://hostname/dbname";
            String un = "username";
            String pw = "password";
            Connection c = (Connection)   DriverManager.getConnection(url,un,pw);
         } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}