将查询结果放在对象数组中

时间:2014-05-07 19:48:02

标签: java sql database object

这是我第一次使用java连接数据库。我通常使用PHP。 我需要一个帮助来从查询结果创建一个对象数组。 让我解释一下代码。

类Studente.java

public class Studente {

    String id;
    String username;
    String password;
    String nome;
    String cognome;

    public Studente(String id, String username, String password, String nome, String cognome) {
       this.id = id;
       this.username = username;
       this.password = password;
       this.nome = nome;
       this.cognome = cognome;
    }

    public Studente load(String[] data) {
        Studente studente = new Studente(data[0], data[1], data[2], data[3], data[4]);
        return studente;
    }     
} 

Class StudenteRepository.java:

public class StudenteRepository {

 public Studente[] selectAll() throws SQLException {
    Studente[] studenti = null;
    DBManager db = new DBManager();
    Connection conn = db.connect();
    String query = "SELECT * FROM Studente";
    Statement stmt = conn.createStatement(); 
    ResultSet rs = stmt.executeQuery(query);
    while(rs.next()) {
       //???
    }
    return studenti;
 }

通常在php中我这样做:

public function selectAll(){
    $db = Database::getInstance();
    $stmt = $db->prepare("SELECT * FROM `users`");
    $stmt->execute();
    $users = array();
    while($result = $stmt->fetch()) {
        $users[] = User::load($result);
    }   
    return $users;
}

如何在java中更改php代码$users[] = User::load($result);? 谢谢

5 个答案:

答案 0 :(得分:1)

你想要的是Java:

List<Student> res = new LinkedList<Student>();
while(rs.next()){
   res.add(new Student(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));
}

我使用了一个列表,因为列表更容易使用。我选择了LinkedList,因为它们在添加元素时具有更好的性能。

答案 1 :(得分:0)

此刻,我正在通过手机,请原谅不良格式化

在while循环内部为结果集

中的每个结果创建一个新的用户对象

用户res =新用户(res.getInt(&#34; student_id&#34;),res.getString(&#34; student_forename&#34;));

ArrayList users = new ArrayList(); users.add(RES);

希望这足以让您入门,res.getString("student_forename")从您的数据库中的学生forename列获取当前值。

答案 2 :(得分:0)

Herr是一家Studente工厂:

public Studente createStudente(ResultSet rs) {
  String id = rs.getString(COLUMN_NAME_ID);
  String username = rs.getString(COLUMN_NAME_USERNAME);
  String password = rs.getString(COLUMN_NAME_PASSWORD);
  String nome = rs.getString(COLUMN_NAME_NOME);
  String cognome = rs.getString(COLUMN_NAME_COGNOME);

  return new Studente(id, username, password, nome, cognome);
}

我建议您将查询更改为以下内容,以便列名称和顺序不存在歧义。

SELECT ID, USERNAME, PASSWORD, NOME, COGNOME FROM 'users';

答案 3 :(得分:0)

您应该使用Studente类的getter和setter来获得最佳练习,而不是使用Studente加载方法。你也应该创建一个java集合,例如。列表适合这种情况。

List<Studente> studentes = new ArrayList<Studente>();
while(rs.next()){
   Studente studente = new Studente(rs.getString("id"),rs.getString("username"),rs.getString("password"),rs.getString("nome"),rs.getString("cognome"));
   studentes.add(studente);
}

答案 4 :(得分:0)

请不要触发查询从数据库中的任何表中选择*。我已经附上了样本灵魂。你可以参考一下

 List<City> listCities = new ArrayList<City>();
            String sqlString = "select City_Name,Airport from AR_Cities";
            PreparedStatement st = null;
            ResultSet rs = null;

            try
            {
                st = DBConnection.GetConnection().prepareStatement(sqlString);

                rs= st.executeQuery();
                while (rs.next())
                {
                    listCities.add(new City(rs.getString("City_Name"),rs.getString("Airport")));

//在你的caase中你可以使用.rs.getString(1)等。                     }

                rs.close();
                DBConnection.CloseConnection(st.getConnection());

            }catch(Exception exp)
            {
                System.out.println("In FlightsADO->GetAllCities  "+ exp.getMessage());
                return null;
            }

            return listCities;