Java servlet只显示数据库中的一个数据,而不是所有数据 publicstaticgetset getdata(){ getset gs=new getset(); 字节img[]=null; ServletOutputStream sos=null; 试一试{ Class.forName(“com.mysql.jdbc.Driver”); Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/db“,”根“,”管理“); PreparedStatement stmt=con.prepareStatement(“从emp中选择*); ResultSet rs=stmt.executeQuery(); while(rs.next()){ gs.setId(rs.getInt(1)); gs.setName(rs.getString(2)); gs.setCountry(rs.getString(3)); gs.setImg(rs.getBytes(4)); } }catch(异常e){System.out.print(e);} 返回gs; } NewClass nc=新的NewClass(); getset a=nc.getdata(); out.println(a.getId()); out.println(a.getName()); out.println(a.getCountry()); out.println(“”);

Java servlet只显示数据库中的一个数据,而不是所有数据 publicstaticgetset getdata(){ getset gs=new getset(); 字节img[]=null; ServletOutputStream sos=null; 试一试{ Class.forName(“com.mysql.jdbc.Driver”); Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/db“,”根“,”管理“); PreparedStatement stmt=con.prepareStatement(“从emp中选择*); ResultSet rs=stmt.executeQuery(); while(rs.next()){ gs.setId(rs.getInt(1)); gs.setName(rs.getString(2)); gs.setCountry(rs.getString(3)); gs.setImg(rs.getBytes(4)); } }catch(异常e){System.out.print(e);} 返回gs; } NewClass nc=新的NewClass(); getset a=nc.getdata(); out.println(a.getId()); out.println(a.getName()); out.println(a.getCountry()); out.println(“”);,java,servlets,Java,Servlets,上面是我检索数据库数据表单的代码 当我运行代码时,它只显示一个数据,即来自数据库的最后一个数据 当我使用(if条件)时,它会向我显示第一列数据,为什么?我搜索时无法理解,但没有找到任何解决方案 getset是getter和setter的类。您只创建了一个对象,并且在while循环中每次都覆盖它,而不是创建一个新对象 public static getset getdata(){ getset gs=new getset(); byte img[]=null;

上面是我检索数据库数据表单的代码 当我运行代码时,它只显示一个数据,即来自数据库的最后一个数据 当我使用(if条件)时,它会向我显示第一列数据,为什么?我搜索时无法理解,但没有找到任何解决方案


getset是getter和setter的类。

您只创建了一个对象,并且在while循环中每次都覆盖它,而不是创建一个新对象

public static getset getdata(){
        getset gs=new getset();
     byte img[]=null;   
     ServletOutputStream sos=null;

    try {
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","admin");
PreparedStatement stmt=con.prepareStatement("select * from emp");
ResultSet rs=stmt.executeQuery();

while(rs.next()){
   gs.setId(rs.getInt(1));
   gs.setName(rs.getString(2));
   gs.setCountry(rs.getString(3));
   gs.setImg(rs.getBytes(4));

}
}catch(Exception e){System.out.print(e);}

    return gs;
    }


         NewClass nc=new NewClass();
         getset a=nc.getdata();
         out.println(a.getId());
         out.println(a.getName());
         out.println(a.getCountry());
         out.println("<img src="+a.getImg()+" width=300 height=300></img>");
您应该每次在while循环中创建一个新对象,设置值,然后将该对象添加到列表中,例如。然后迭代并打印该列表以测试其运行情况


因此,这应该是循环
gs=new getset()中的第一条语句(如果在循环外部声明了gs并将其设置为null),然后将gs添加到循环末尾的列表中(内部,而不是外部)。

您只创建了一个对象,并且在while循环中,每次都覆盖它,而不是创建一个新对象

public static getset getdata(){
        getset gs=new getset();
     byte img[]=null;   
     ServletOutputStream sos=null;

    try {
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","admin");
PreparedStatement stmt=con.prepareStatement("select * from emp");
ResultSet rs=stmt.executeQuery();

while(rs.next()){
   gs.setId(rs.getInt(1));
   gs.setName(rs.getString(2));
   gs.setCountry(rs.getString(3));
   gs.setImg(rs.getBytes(4));

}
}catch(Exception e){System.out.print(e);}

    return gs;
    }


         NewClass nc=new NewClass();
         getset a=nc.getdata();
         out.println(a.getId());
         out.println(a.getName());
         out.println(a.getCountry());
         out.println("<img src="+a.getImg()+" width=300 height=300></img>");
您应该每次在while循环中创建一个新对象,设置值,然后将该对象添加到列表中,例如。然后迭代并打印该列表以测试其运行情况


因此,这应该是循环
gs=new getset()中的第一条语句(如果在循环外部声明了gs并将其设置为null),然后将gs添加到循环末尾的列表中(内部,而不是外部)。

在/if

使用
时,如果
,则仅在第一次输入

当在
循环中输入
时,将覆盖值,直到最后一次数据更新


要获取多个值,请将数据添加到
列表中,例如您在while/if中仅设置/保存一个对象

使用
时,如果
,则仅在第一次输入

当在
循环中输入
时,将覆盖值,直到最后一次数据更新


要获取多个值,请将数据添加到
列表中,例如
gs
始终是同一个对象。检索所有值,但在while循环中覆盖这些值。这就是为什么最终只能得到最后一个。
gs
始终是同一个对象。检索所有值,但在while循环中覆盖这些值。这就是为什么你最终只得到最后一个。考虑接受你发现最有用的答案。考虑接受你发现最有用的答案。