【问题标题】:Accessing Method that is not included in Constructor构造函数中不包含的访问方法
【发布时间】:2017-03-31 16:01:50
【问题描述】:

我创建了一个类来连接数据库并执行各种插入、删除、更改等操作...

包含一个数组以显示所有内容。在数据库中会自动创建一个 ID,所以我不输入它,但我仍然希望数组从每一列输出 ID。我的代码如下所示,如果我在 cJourneys 等之前插入 cID。我得到构造函数未定义。想弄清楚如何从数据库中访问 ID 以每次使用数组调用它..

public Car(String cLicenseIn, int cJourneysIn, String cUsernameIn, String cPasswordIn) {
    cLicense = cLicenseIn;
    cJourneys = cJourneysIn;
    cUsername = cUsernameIn;
    cPassword = cPasswordIn;

}

// Display all Vehicles
public ArrayList<Car> getAllCar() {
    ArrayList<Car> AllCar = new ArrayList<Car>();
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url + dbName, userName, password);
        statement = conn.createStatement();
        resultSet = statement.executeQuery("select * from eflow.Registration");

        while (resultSet.next()) {
            Car nextCar = new Car(resultSet.getString("cLicense"), resultSet.getInt("cJourneys"),
                    resultSet.getString("cUsername"), resultSet.getString("cPassword").toString());
            AllCar.add(nextCar);
        }
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return AllCar;
}

【问题讨论】:

  • 添加另一个同样采用 ID 的构造函数怎么样?另外,getString("cPassword").toString() 的意义何在?
  • @AndyTurner OP 说如果在cLicensecJourneys 之间的new Car 语句中添加了第5 个resultSet.getInt("cID") 调用(“如果我在cJourneys 之前插入cID”),它抱怨Car 上没有 5 参数构造函数。

标签: java mysql


【解决方案1】:

与方法一样,构造函数也可以在 Java 中重载(接受不同的参数集),因此您可以重载同样接受 id 的 Car 构造函数,即,您将拥有两个构造函数为您的Car 班级。

Car 带有 id 参数的构造函数(只要你想从数据库创建 Car 就使用它):

public Car(String id, String cLicenseIn, 
 int cJourneysIn, String cUsernameIn, String cPasswordIn) {
  //set fields here
}

Car 没有 id 参数的构造函数(只要你想从用户输入创建 Car 就使用它):

public Car(String cLicenseIn, int cJourneysIn, 
             String cUsernameIn, String cPasswordIn) {
   //set fields here
}

getAllCar() 方法:

public ArrayList<Car> getAllCar() {
    ArrayList<Car> AllCar = new ArrayList<Car>();
    try {
           //add your existing code here

            Car nextCar = new Car(resultSet.getString("ID"), ,
               resultSet.getString("cLicense"), 
               resultSet.getInt("cJourneys"),
               resultSet.getString("cUsername"),
               resultSet.getString("cPassword").toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
       //add null checks and close the resources
       statement.close();
       conn.close();
       resultSet.close();
    }
    return AllCar;
}

另外,我强烈建议你关闭finally块中的资源或者将try与资源一起使用,否则最终会导致资源泄漏

【讨论】:

  • 我是否只需要创建第二个构造函数就可以将 ID 添加到数组中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多