ArrayList的输出

时间:2019-01-07 16:34:37

标签: java database sqlite html-table

ArrayList<String> list_apps = new ArrayList<String>();
    String html = null;

    try
    {
        String username = null;
        String appname= null;
        String ip = null;
        String token = null;

        //connessione
        sqlite.setDbPath(dbPath);
        con = sqlite.connect();
        String query="SELECT Username, AppName, Ip, Token FROM Apps";
        ResultSet rs = con.createStatement().executeQuery(query);
        //

        while(rs.next())
        {
            username = rs.getString("Username");
            appname = rs.getString("AppName");
            ip = rs.getString("Ip");
            token = rs.getString("Token");
            list_apps.add(username);
            list_apps.add(appname);
            list_apps.add(ip);
            list_apps.add(token);
            System.out.println(username + " "+ appname + " " + ip+ " " + token);
        }


        html="<html>" + "<body>" + "<table border ='1'>" +
                "<tr>" + 
                "<td>Username</td>" +
                "<td>App Name</td>" +
                "<td>Ip</td>" +
                "<td>Token</td>" +
                "</tr>";

        for(int i = 0; i<list_apps.size(); i++)
        {
            html+="<td>"+list_apps.get(0).toString() +"</td>";//username
            html+="<td>"+list_apps.get(1).toString() +"</td>";//appname
            html+="<td>"+list_apps.get(2).toString() +"</td>";//ip
            html+="<td>"+list_apps.get(3).toString() +"</td>";//token
            html+="<tr>";
        }
        html+="</table>"+"</body>"+"</html>";

        //System.out.println(html);
        //System.out.println(list_apps.get(0).toString());

    }

我使用Java代码输出html表时遇到问题。在我的数据库中,我只有两个元素,但是html的输出是数据库第一行的10行表。

我不知道arraylist的实用程序是否正确,我必须从嵌入的SQLite数据库中打印usernameappnameiptoken: / p>

    Username    App Name    Ip  Token
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44
lucapelle98 dsdasda 123.54.65.78    [B@2bcce44

输出只是关于数据库重复的表的第一行

3 个答案:

答案 0 :(得分:2)

首先,您应该创建一个名为App的类,其中包含单个App的数据。这样做将使您的工作更加轻松。

class App {
    private final String username;
    private final String appname;
    private final String ip;
    private final String token;

    // Add constructor, getters, toString, equals, hashCode and so on.
}

现在,当您从数据库中读取数据时,构造此类的实例并将其放入列表中。

List<App> list_apps = new ArrayList<>();

while(rs.next()) {
    App app = new App(
        rs.getString("Username"),
        rs.getString("AppName"),
        rs.getString("Ip"),
        rs.getString("Token")
    );

    list_apps.add(app);
    System.out.println(app);
}

现在,当您生成HTML时,您可以执行以下操作:

for(App app : list_apps) {
    html += "<td>" + app.getUsername() + "</td>";
    html += "<td>" + app.getAppName() + "</td>";
    html += "<td>" + app.getIp() + "</td>";
    html += "<td>" + app.getToken() + "</td>";
    html += "<tr>";
}

答案 1 :(得分:1)

这里:

for(int i = 0; i<list_apps.size(); i++)
    {
        html+="<td>"+list_apps.get(0).toString() +"</td>";//username
        html+="<td>"+list_apps.get(1).toString() +"</td>";//appname
        html+="<td>"+list_apps.get(2).toString() +"</td>";//ip
        html+="<td>"+list_apps.get(3).toString() +"</td>";//token
        html+="<tr>";
    }

您实际执行的操作:将带有4列的“行”追加到列表中。 因此,您想要在4个元素的“块”中进行for循环工作,例如:

for(int i = 0; i<list_apps.size(); i+=4)
    {
        html+="<td>"+list_apps.get(i).toString() +"</td>";//username
        html+="<td>"+list_apps.get(i+1).toString() +"</td>";//appname
        html+="<td>"+list_apps.get(i+2).toString() +"</td>";//ip
        html+="<td>"+list_apps.get(i+3).toString() +"</td>";//token
        html+="<tr>";
    }

除此之外,“真实”答案是:创建一个表示该数据的类,例如具有成员字段username,appname,ip,token。然后为每一行创建一个对象,并将该单个对象附加到列表中。然后迭代该列表,一次只打印一个对象!

您的方法基本上是将所有数据“展开”到一个平面列表中,通常这不是一个好主意。

答案 2 :(得分:0)

再次快速查看您的代码。 在您的for循环中:

 for(int i = 0; i<list_apps.size(); i++)

您所引用的list_apps之前曾在以下位置执行:    list_apps.add(username); list_apps.add(appname); list_apps.add(ip); list_apps.add(token);

您正在输出一个列表,其中包含输入的变量的大小。您需要使用其他计数系统。

p.s。您输出的表长8行(您添加了4个变量x 2个条目)