获取从一个类到齿形类方法的所有值

时间:2018-05-14 08:18:26

标签: java swing resultset

我有一个类IntegrationWithDB,其中我必须使用方法getConnection()和selectFromDB()。

  • 在selectFromDb()中有一个结果集,我想得到结果 在另一个类方法中设置vales
  • 实际上确实如此,但它只显示了dataBase表的最后一个值。
  • 注意我在IntegrationWithDB类中创建了getter和setter方法,并在selectFromDB()方法中使用。

    public void selectFromDB(){

        try {
            if (this.conn == null) {
                this.getConnection();
            }
    
            if (this.stmt == null) {
                this.stmt = this.conn.createStatement();
            }
    
            int success = 0;
            this.query = "select * from contacts order by node_id";
    
           this.rs = this.stmt.executeQuery(query);
           // something is wrong in the while loop
            while (rs.next()) {
    
                setId(rs.getInt("node_id"));                               // i made getter and setter for id, name, parent and for level
                setNam(rs.getString("node_name"));
                setParnt(rs.getString("node_parent"));
                setLvl(rs.getInt("node_parent"));
    
    
            }
    
    
    
            if (success == 0) {
                this.conn.rollback();
            } else {
                this.conn.commit();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    

并且在另一个类test中,我在此方法中有方法displayList(),我编写以下代码

public class test {


     IntegrationWithDbClass qaz = new IntegrationWithDbClass();

    public  void displayList ( ) {


       qaz.getConnection();
       qaz.selectFromDB();


       for(int i = 0; i< 5; i++){
        System.out.println(" "+qaz.getId()); 
         System.out.println(" "+qaz.getNam());
       }

          }

当我在main方法中初始化displayList()方法时,它显示以下结果

5
red

我怎样才能获得所有五个值?

2 个答案:

答案 0 :(得分:0)

我假设您目前正在将这些属性存储在int / string变量中。在循环的每次迭代中,您都会覆盖这些值。你需要做的是将它们存储在像ArrayList这样的集合中,并在每次迭代中将add()存储到这个集合中。

答案 1 :(得分:0)

首先,您必须创建通常称为Entity类的内容。这是表示数据库中单行的类。理想情况下,这应该与与数据库连接交互的代码分开。

首先,创建一个名为Contact的类,并在其中放入您拥有的4个字段idnameparentlevel ,使用相应的getter方法。如果您不希望程序改变它们使它们变得不可变,那么确保一致性是一种好的做法。如下所示:

public class Contact {

   private final int id;
   private final String name;
   private final String parent;
   private final String level;

   public Contact(String id, String name, String parent, String level) {
     this.id = id;
     this.name = name;
     this.parent = parent;
     this.level = level;
   }

   public int getId() {
     return id;
   }

   //... put the rest of the getter methods
}

然后在你的IntegrationWithDB课程中(我会将其重命名为更有意义的内容,例如ContactRepository),您可以更改所需的方法:

public List<Contact> getContacts() {
   // ... your database connection and query code here

   this.rs = this.stmt.executeQuery(query);

   List<Contact> contacts = new LinkedList<Contact>();

   while (rs.next()) {

      int id = rs.getInt("node_id");                               
      String name = rs.getString("node_name");
      String parent = rs.getString("node_parent");
      String level = setLvl(rs.getInt("level"));

      contacts.add(new Contact(id, name, parent, level));
   }

   //... the rest of your database handling code, don't forget to close the connection

   return contacts;
 }

然后从displayList()开始,您只需要调用getContacts(),它会为您提供要迭代的Contact个对象的列表。