我想使用ArrayList从数据库中显示我的控制台中的所有数据

时间:2012-12-12 10:44:17

标签: java database java-ee

Hello我想要的是在Console上显示我的数据库表的全部内容。我试图首先从数据库中获取记录并存储在ArrayList中,但它没有显示任何东西,它显示它:

[com.suven.java.EmployeeDTO@970c0e]
[com.suven.java.EmployeeDTO@970c0e, com.suven.java.EmployeeDTO@987197] 
[com.suven.java.EmployeeDTO@970c0e, com.suven.java.EmployeeDTO@987197, com.suven.java.EmployeeDTO@497904]

我完全不知道该怎么做。我的代码是:

EmployeeDTO java file

public class EmployeeDTO 
{
    //private properties
    private int empNo;
    private String eName;
    private String jobTitle;
    //setters
    public void setEmpNo(int val){empNo=val;}
    public void setEName(String val){eName=val;}
    public void setJob(String val){jobTitle=val;}
    // getters
    public int getEmpNo(){return empNo;}
    public String getEName(){return eName;}
    public String getJob(){return jobTitle;}
}

我的EmployeeList java代码是:

public class EmployeeList 
{

  public static void main(String argv[]) 
  {
   Connection conn=null;
   Statement stmt=null;
   ResultSet rs=null;      

   try 
   {
    // Load the JDBC driver  
    // This can be skipped for Derby, but derbyclient.jar has to be in the CLASSPATH   
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String accessFileName = "E:/Database/java";
    conn=DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access  Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb;");

    // Build an SQL String 
    String sqlQuery = "SELECT * from Employee"; 

    // Create a Statement object
    stmt = conn.createStatement(); 

    // Execute SQL and get obtain the ResultSet object
    rs = stmt.executeQuery(sqlQuery);  
    ArrayList<EmployeeDTO> employees = new ArrayList<EmployeeDTO>();
    // Process the result set - print Employees
    while (rs.next())
    { 
        EmployeeDTO currentEmp = new EmployeeDTO();

        currentEmp.setEmpNo(rs.getInt("EMPNO"));
        currentEmp.setEName(rs.getString("ENAME"));
        currentEmp.setJob(rs.getString("JOB_TITLE"));
        employees.add(currentEmp);
        System.out.println(employees);
    }       
   } 
   catch( SQLException se ) 
   {
      System.out.println ("SQLError: " + se.getMessage ()+ " code: " + se.getErrorCode ());
   }
   catch( Exception e )
   {
      System.out.println(e.getMessage());
      e.printStackTrace(); 
   }
   finally
   {
       // clean up the system resources
       try
       {
       rs.close();     
       stmt.close(); 
       conn.close();  
       }
       catch(Exception e)
       {
           e.printStackTrace();
       } 
   }
}
}

我的数据库是:

Employee
EMPN     ENAME     JOB_TITLE
1        abc       xyz
2        pqr       mno
3        lmn       hij

请帮我,我已经发布了我的完整代码和数据库 我在哪里出错如何在控制台中显示它

5 个答案:

答案 0 :(得分:3)

您必须在toString()课程中实施EmployeeDTO。如果您使用的是Eclipse,则可以生成方法:右键单击类 - &gt;来源 - &gt;生成toString()...

答案 1 :(得分:1)

您需要覆盖toString课程中的EmployeeDTO。您可以使用String.format进行格式化:

@Override
public String toString() {
   return String.format("%d\t%s\t%s", empNo, eName, jobTitle);
}

要在单独的一行打印每个employee,您可以使用:

for (EmployeeDTO employee : employees) {
    System.out.println(employee);
}

答案 2 :(得分:1)

ArrayList<EmployeeDTO> employees = new ArrayList<EmployeeDTO>();
// Process the result set - print Employees
while (rs.next())
{ 
    EmployeeDTO currentEmp = new EmployeeDTO();

    currentEmp.setEmpNo(rs.getInt("EMPNO"));
    currentEmp.setEName(rs.getString("ENAME"));
    currentEmp.setJob(rs.getString("JOB_TITLE"));
    employees.add(currentEmp);
    System.out.println(employees);
}       

在此代码中,您将Object放入ArrayList,而不是实际的String / Value。这就是为什么你得到com.suven.java.EmployeeDTO@970c0e

答案 3 :(得分:0)

您的DTO中似乎需要toString()的实施。您将实现它,以便返回一个由您的员工姓名,工作等组成的字符串......这是指向10 tips for implementing toString()的链接。

我还注意到,在您阅读每位员工后,您打印了员工的列表。我怀疑你需要打印员工本身。

System.out.println(employees); // this is the list itself!

答案 4 :(得分:0)

除了行

之外你正在做的一切
System.out.println(employees);

在while循环中。

你不能在EmployeeDTO类中显示那些没有重载toString()的ArrayList。

相反,要显示数组列表,请在while循环

之后执行此操作
for(EmployeeDTO emp : employees)
{
    System.out.println(emp.getEmpNo() + " " +  emp.getEName() + " " + emp.getJob());
}