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数据库中打印username
,appname
,ip
,token
: / 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
输出只是关于数据库重复的表的第一行
答案 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个条目)