【问题标题】:Unable to import a connection from a different class无法从其他类导入连接
【发布时间】:2018-01-12 15:05:59
【问题描述】:

我正在尝试创建一个库来帮助访问数据库中的数据,并将在未来用于另一个应用程序。但是我想我在某个地方搞砸了,我无法将类数据库中定义的 Connection 导入到类特性中。它向我抛出的错误是

默认构造函数无法处理隐式构造函数抛出的异常类型异常。必须定义显式构造函数。

1)

public class database {

    public static String databaseName;
    public static String username;
    public static String password;
    public String tableName;
    public String schema;
    public String query;
    ResultSet rs;
    public static Connection dbconnection;

    public database(String databaseName, String username, String password) throws Exception {
        this.databaseName = databaseName;
        this.username = username;
        this.password = password;
    }

    public database() throws Exception{
        databaseName = "database";
        username = "admin";
        password = "12345";
        // TODO Auto-generated constructor stub
    }

    // Connect to selected Cache Database
    public static Connection connect() throws Exception {
        try {
            // Default port is 1972
            String url = "jdbc:Cache://127.0.0.1:1972/" + databaseName;
            Class.forName("com.intersys.jdbc.CacheDriver").newInstance();
            dbconnection = DriverManager.getConnection(url, username, password);
            System.out.println("Connected to " + databaseName + " database.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dbconnection;
    }
}

2)

public class features {
    database db = new database();
    Connection conn = db.connect();
    ResultSet rs;
    Statement st = conn.createStatement();
}

任何帮助将不胜感激!

【问题讨论】:

  • 将您的代码放入方法中。不是直接在课堂内。这不是有效的 Java。此外,学习并尊重 Java 命名约定,并停止抛出异常。抛出一个明确的、精确的异常子类型(或者,在你的情况下,根本没有异常,因为你的指令都没有抛出异常)。此外,从构造函数初始化静态字段根本没有意义。您还需要了解什么是静态字段,以及什么是实例字段。

标签: java jdbc


【解决方案1】:

您的database 类已经有一个连接和一个结果集变量,为什么还要在类features 中放置另一个连接和结果集?,您应该只在一个类中处理连接,因为不需要两个连接您只连接到一个数据库

另外,每种方法都不需要throws Exception,我认为这应该适合你:

数据库

public class database {

    public static String databaseName;
    public static String username;
    public static String password;
    public String tableName;
    public String schema;
    public String query;
    ResultSet rs;
    public static Connection dbconnection;
    public Statement st;

    public database(String databaseName, String username, String password) {
        this.databaseName = databaseName;
        this.username = username;
        this.password = password;
    }

    public database(){
        databaseName = "database";
        username = "admin";
        password = "12345";
        dbconnection=connect();
        st= dbconnection.createStatement();
    }

    // Connect to selected Cache Database
    public static Connection connect() {
        try {
            // Default port is 1972
            String url = "jdbc:Cache://127.0.0.1:1972/" + databaseName;
            Class.forName("com.intersys.jdbc.CacheDriver").newInstance();
            dbconnection = DriverManager.getConnection(url, username, password);
            System.out.println("Connected to " + databaseName + " database.");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dbconnection;
    }
}

功能

public class features {
    public static database db;
    public ResultSet rs;

    public features (){
    db= new database();
    }

}

我对您的代码做了一些更改:

  • 从您的班级features 中删除了变量conn,因为班级database 中已经存在一个连接
  • 将 Statement 变量 st 移至 database 类,因为您将在该类中处理连接
  • 通过添加构造函数对 features 类进行了一些修改,因为您在其中声明变量并立即初始化它们而不使用构造函数

我所做的修复应该消除错误,我没有时间检查代码中的语法错误,所以这取决于你,但我认为它应该可以正常工作,错误发生是因为你在哪里抛出异常在database 类的方法中,而不是在features 类中处理它们,有关此错误的更多信息,您可以查看另一个用户就您的相同错误提出的这个问题:

Why default constructor cannot handle exception type Exception?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2018-11-21
    • 2019-12-21
    • 1970-01-01
    • 2017-01-25
    相关资源
    最近更新 更多