【问题标题】:Table info to an ArrayList表信息到 ArrayList
【发布时间】:2014-05-06 22:54:31
【问题描述】:

我创建了一个 sql 数据库,其中包含一个包含有关飞机信息的表,我希望能够获取此信息并将其插入到 Aircraft(object) 类型的 ArrayList 中,尽管 sql 表中的不同信息是不同的原始类型........这个可以吗?`package uk.ac.qub.sqldbflights;

这是一个具有所有属性的飞机对象

public class Aircraft {

/**
 * private String containing the airline name of the aircraft
 *                  -Can't be blank
 */
private int aircraft_number;

/**
 * private String containing the flight number belonging to the aircraft
 *                  -Can't be blank
 */
private String airline_company;

/**
 * private String containing the aircrafts city of origin
 *                  -Can't be blank
 */
private String departure_airport;

/**
 * private int which holds the aircrafts fuel level
 *                  -Must be over 0 and less than 100
 */
private float passenger_number;

/**
 * private int containing the number of passengers aboard the aircraft
 *                  -Must be over 0 and less than 300
 */
private float fuel_percentage;

/**
 * private Boolean indicting wether the aircraft is in the landing queue or not
 */
private int flight_time_remaining;

/**
 * private Boolean indicating wether the aircraft is landed or not
 */
private boolean in_queue;

private boolean is_landed;

public Aircraft() {
}

/**
 * Song creation
 * @param name -not null
 * @param artist -not null
 * @param album -not null
 * @param genre- not null and one of Pop, Dance, Rock
 * @throws IllegalArgumentException
 */
public Aircraft(int aircraft_number, String airline_company, String departure_airport, int passenger_number, float fuel_percentage, int flight_time_remaining, boolean in_queue, boolean is_landed)
        throws IllegalArgumentException {
    try {
        // set name
        this.setAircraft_number(aircraft_number);
        this.setAirline_company(airline_company);
        this.setDeparture_airport(departure_airport);
        this.setPassenger_number(passenger_number);
        this.setFuel_percentage(fuel_percentage);
        this.setFlight_time_remaining(flight_time_remaining);
        this.setIn_queue(in_queue);
        this.setIs_landed(is_landed);




    } catch (IllegalArgumentException ex) {
            System.out.println("Unable to create song due to arguments passed");
            throw ex;
    }}


public int getAircraft_number() {
    return aircraft_number;
}

public void setAircraft_number(int aircraft_number) {
    this.aircraft_number = aircraft_number;
}

public String getAirline_company() {
    return airline_company;
}

public void setAirline_company(String airline_company) {
    this.airline_company = airline_company;
}

public String getDeparture_airport() {
    return departure_airport;
}

public void setDeparture_airport(String departure_airport) {
    this.departure_airport = departure_airport;
}

public float getPassenger_number() {
    return passenger_number;
}

public void setPassenger_number(float passenger_number) {
    this.passenger_number = passenger_number;
}

public float getFuel_percentage() {
    return fuel_percentage;
}

public void setFuel_percentage(float fuel_percentage) {
    this.fuel_percentage = fuel_percentage;
}

public int isFlight_time_remaining() {
    return flight_time_remaining;
}

public void setFlight_time_remaining(int flight_time_remaining) {
    this.flight_time_remaining = flight_time_remaining;
}

public boolean isIn_queue() {
    return in_queue;
}

public void setIn_queue(boolean in_queue) {
    this.in_queue = in_queue;
}

public boolean isIs_landed() {
    return is_landed;
}

public void setIs_landed(boolean is_landed) {
    this.is_landed = is_landed;
}

}

这是连接到 sql DB 并尝试将信息添加到数组列表的代码...

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

    import java.sql.Statement;
    import java.util.ArrayList;


    public class FlightsDbtoArrayList {
ArrayList<Aircraft> allFlights = new ArrayList<Aircraft>();

public static void main(String[] args) {
    // Entering username to verify connection to SQL Server
    String url = "jdbc:mysql://"; 
    Connection con;

    Statement statement1;



    try {
        Class.forName("com.mysql.jdbc.Driver");
        //Catching any errors and printing a message to the user
    } catch(java.lang.ClassNotFoundException e) {
        System.err.print("ClassNotFoundException: "); 
        System.err.println(e.getMessage());
    }

    try {
        // Entering username and password to verify connection to SQL Server
        con = DriverManager.getConnection(url);





        //Creating platform for a SQL query Statement
        statement1 = con.createStatement();
        //Creating and executing the designed SQL query statement
        ResultSet results1 = statement1.executeQuery("SELECT aircraft_number, airline_company, departure_airport, passenger_number, fuel_Percentage, flight_time_remaining, in_queue, is_landed FROM flights");
        //Displaying the results of the query to screen
        printResults(results1);


        con.close();
        statement1.close();


    } catch(SQLException ex) {
        System.err.println("SQLException: " + ex.getMessage());
    }
}
/**
 * Method to display the results of the three SQL queries
 * @param results
 * @throws SQLException
 * 
 * 
 */
public ArrayList<Aircraft> allFlights() {
    return allFlights;
}

/**
 * set  songs on the system
 * @param allSongs
 */
public  void setSongs(ArrayList<Aircraft> allSongs) {
    allSongs = this.allFlights;
}
private static void printResults(ResultSet results) throws SQLException {


    while (results.next()) {
        int aircraft_number = results.getInt("aircraft_number");
        String airline_company = results.getString("airline_company");
        String departure_airport = results.getString("departure_airport");
        int passenger_number = results.getInt("passenger_number");
        float fuel_percentage = results.getFloat("fuel_percentage");
        int flight_time_remaining = results.getInt("flight_time_remaining");
        boolean in_queue = results.getBoolean("in_queue");
        boolean is_landed = results.getBoolean("is_landed");


        Aircraft a1;


        ArrayList<Aircraft> allFlights = new ArrayList<Aircraft>();



        a1 = new Aircraft(aircraft_number, airline_company, departure_airport, passenger_number, fuel_percentage, flight_time_remaining, in_queue, is_landed);

        allFlights.add(a1);
        System.out.println(allFlights);
    }
}
}
`

【问题讨论】:

  • ArrayList allFlights = new ArrayList();不应该在while循环中

标签: java sql eclipse jdbc arraylist


【解决方案1】:

是的,绝对有可能从数据库中获取对象(飞机)列表。但在这种情况下,PrintResult 内的while 循环有一些错误。

您正在while 循环中创建列表allFights,该循环将在每次迭代中创建新列表并将a1 添加到其中,因此最终您将只有一个包含一架飞机详细信息的列表。

System.out.println(allFlights) 不会提供太多期望的输出(或者可能),但我建议您应该在 AirCraft 类中覆盖 toString() 方法。

尝试如下更改您的PrintResult 方法。

private static void printResults(ResultSet results) throws SQLException {

ArrayList<Aircraft> allFlights = new ArrayList<Aircraft>();

Aircraft a1;

while (results.next()) {
    int aircraft_number = results.getInt("aircraft_number");
    String airline_company = results.getString("airline_company");
    String departure_airport = results.getString("departure_airport");
    int passenger_number = results.getInt("passenger_number");
    float fuel_percentage = results.getFloat("fuel_percentage");
    int flight_time_remaining = results.getInt("flight_time_remaining");
    boolean in_queue = results.getBoolean("in_queue");
    boolean is_landed = results.getBoolean("is_landed");
    a1 = new Aircraft(aircraft_number, airline_company, departure_airport, passenger_number, fuel_percentage, flight_time_remaining, in_queue, is_landed);
    allFlights.add(a1);

    //Instead of this line System.out.println(allFlights);

    //write following code
    For(AirCraft aircraft : allFlights){
        System.out.println(aircraft.toString());
    }
}
}

编辑 2:在您的 AirCraft 类中编写以下方法。

@Override 
Public String toString(){
    String string;
    //Write some code here so that you can represent you object using this method
    //for example I am adding just the aircraft_number
    string = getAircraft_number()+"";
    return string;
}

重要提示:我编写的 toString() 方法只是一个示例,您需要学习如何为任何类正确编写 toString() 方法。 thisthis 是学习这一点的好起点。并且不要再担心您的 allFlights 列表,因为根据此代码它正在创建,但您无法按照您尝试的方式打印它。

【讨论】:

  • [uk.ac.qub.sqldbflights.Aircraft@47eaec].....它只是输出了很多次而不是数据库信息,我希望它为每架飞机创建一个 Aircraft 对象在数据库中,然后将它们添加到 ArrayList 以便它们可以在程序的其他地方使用....有什么想法吗?顺便说一句,谢谢您的帮助!
  • 是的,您的数组列表正在创建,但您打印的方式不正确(它是正确的,但会输出对对象的引用而不是字符串)。请检查我的代码中的编辑部分。
  • 我在 Aircraft 类中找不到 toString 方法....对不起,我是一个真正的新手,不知道如何在 arrayList 中创建一个单独的 Aircraft 对象...所以像 a1 会有第一个飞机细节,a2 第二个....等
  • @user3610099 这能解决您的问题吗?如果您回答结果如何,那就太好了。
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-06-22
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多