【问题标题】:MySQL resultset to java arrayMySQL结果集到java数组
【发布时间】:2013-01-23 12:59:12
【问题描述】:

我目前在尝试做的事情上做得不是很好。目的是从 MySQL 表中获取所有信息并将其放入数组中。一旦进入一个数组,我将使用 java 中的优先级队列并尝试让它与它一起工作....但这不是我目前遇到的问题。

公共静态无效数组(字符串参数[]){ // 创建优先队列

   try { 
        String url = "jdbc:mysql://localhost:3306/project"; 
        Connection conn = DriverManager.getConnection(url,"root","nbuser"); 

        PreparedStatement stmt = conn.prepareStatement("SELECT user_id,s_date,e_date,d_date,department,projectname,projectapplication FROM booking");
        ResultSet rs; 
        rs=stmt.executeQuery();

                  List<User> userList = new ArrayList<User>();
        while(rs.next()) {
        User user = new User(); //issue here with non-static variable
        user.userid(rs.getString("user_id"));
        user.s_date(rs.getObject("s_date"));
        user.e_date(rs.getObject("e_date"));
        user.d_date(rs.getObject("d_date"));
        user.department(rs.getObject("department"));
        user.projectname(rs.getObject("projectname"));
        user.projectapplication(rs.getObject("projectapplication"));
        user.priority(rs.getObject("priority"));

        userList.add(user);
     }

        conn.close(); 
    } catch (Exception e) { 
        System.err.println("Got an exception! "); 
        System.err.println(e.getMessage()); 
    } 
} 

目的是让它遍历表中的所有不同部分并将它们填充到一个数组中,但我一直坚持填充数组。

任何帮助将不胜感激。

编辑:

public class User {
public String userid;
public String s_date;
public String e_date;
public String d_date;
public String department;
public String projectname;
public String projectapplication;
public int priority;

    private void userid(String string) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void s_date(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void e_date(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void d_date(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void department(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void projectname(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void projectapplication(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private void priority(Object object) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

类似的?

【问题讨论】:

  • 您选择了很多字段。其中哪些需要添加到数组中?
  • 如果可以使用 JPA 之类的 ORM 会更好、更容易。寻找适合您的实现,例如 Hibernate、EclipseLink 等等。他们会更容易相处

标签: java mysql resultset


【解决方案1】:

使用 SQL 表中的适当字段创建一个User 类,并将每个用户保存在一个列表中。

  List<User> userList = new ArrayList<User>();
  while(rs.next()) {
     User user = new User();
     user.setId(rs.getString("user_id"));
     user.setStartDate(rs.getTimestamp("s_date");
     ....
     userList.add(user);
  }
  return userList;

编辑

  class User {
   private String id;
   private Date startDate;
   //other fields need to be declared as well as their setter methods

   public void setStartDate(Date startDate) {
      this.startDate = startDate;
   }

   public void setId(String id) {
      this.id = id;
   }
  }

我还建议看看JPAHibernate

【讨论】:

  • 像上面在我的编辑中添加的用户类?所以从那里开始会是 user.(stringname)rs.getObject("....") 的情况吗?对此有点不确定
  • 这取决于字段,例如,如果您在数据库中将日期字段保留为timestamp,我会使用Date 类而不是String
  • 你可以使用rs.getString(fieldname) 或者你可以使用rs.getObject(fieldname) 然后再投射
  • 我在编辑部分编辑了我的课程,然后在原始问题中实现了你的功能,但评论了我有错误的地方,也是课程正确还是我完全偏离了轨道(大多数可能的情况)
  • 最好将setter 方法命名为带有set 前缀的字段名称。例如; setId, setDepartmant ..
猜你喜欢
  • 2016-06-02
  • 2019-02-15
  • 2019-03-13
  • 1970-01-01
  • 2021-07-24
  • 2015-08-05
  • 2016-07-21
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多