首页 > 解决方案 > 在 JSF 中显示通过 SQL 填充的 ArrayList

问题描述

所以在下面的代码中,我想运行一个查询来获取一个充满“团队”的表并将它们显示在页面上。但是它们没有显示。我可能认为这是查询的问题,但我对JavaJSFSQL通过 Java 并不了解。我正在尝试使用 System.out.print 显示查询的内容以尝试缩小问题范围,但无济于事。

抱歉,我没有指定我正在使用ArrayList. 通过 SQL 填充它并将其显示在xhtml文件中。

https://pastebin.com/Ua500ueJ

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package database;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import java.sql.*;
import java.util.*;

@ManagedBean(name="DBConnection")
@RequestScoped
public class DBConnection {
    private String username;
    private String password;
    private String dbusername;

    public String getDbpassword() {
        return dbpassword;
    }
    public String getDbusername() {
        return dbusername;
    }

    private String dbpassword;
    Connection con;
    Statement ps;
    ResultSet rs;
    String SQL_Str;

    public void dbData(String UName)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from users where user_name like ('" + UName +"')";
            rs=ps.executeQuery(SQL_Str);
            rs.next();
            dbusername=rs.getString(2).toString();
            dbpassword=rs.getString(4).toString();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
        }
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public String checkValidUser()
    {
        dbData(username);

        if(username.equalsIgnoreCase(dbusername))
        {

            if(password.equals(dbpassword))
                return "home.xhtml";
            else
            {
                return "invalid";
            }
        }
        else
        {
            return "invalid";
        }
    }

    public List<Team> displayTeams(Connection con, Statement ps, ResultSet rs, String SQL_Str) {
        List<Team> teams = new ArrayList<Team>();
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from team";
            rs = ps.executeQuery(SQL_Str);
            Team t;
            while(rs.next()) {
                t = new Team();
                t.setId(rs.getInt("teamId"));
                t.setTeamname(rs.getString("teamName"));
                t.setYearFounded(rs.getInt("yearFounded"));
                t.setTeamCrest(rs.getString("teamCrest"));
                t.setLeaguename(rs.getString("leagueName"));
                t.setLeagueId(rs.getInt("leagueId"));
                teams.add(t);
                System.out.println(t);
            } 
            System.out.println(teams+"\nTeams");
            return teams;
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
            return null;
        }
    }

    private Team team = new Team();
    List<Team> teams = new ArrayList<Team>();

    public List<Team> getTeams() {
        teams = displayTeams(con, ps, rs, SQL_Str);
        return teams;
    }

    public void setTeams(List<Team> teams) {
        this.teams = teams;
    }




}

团队课程:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package database;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import java.sql.*;
import java.util.*;

@ManagedBean(name="DBConnection")
@RequestScoped
public class DBConnection {
    private String username;
    private String password;
    private String dbusername;

    public String getDbpassword() {
        return dbpassword;
    }
    public String getDbusername() {
        return dbusername;
    }

    private String dbpassword;
    Connection con;
    Statement ps;
    ResultSet rs;
    String SQL_Str;

    public void dbData(String UName)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from users where user_name like ('" + UName +"')";
            rs=ps.executeQuery(SQL_Str);
            rs.next();
            dbusername=rs.getString(2).toString();
            dbpassword=rs.getString(4).toString();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
        }
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public String checkValidUser()
    {
        dbData(username);

        if(username.equalsIgnoreCase(dbusername))
        {

            if(password.equals(dbpassword))
                return "home.xhtml";
            else
            {
                return "invalid";
            }
        }
        else
        {
            return "invalid";
        }
    }

    public List<Team> displayTeams(Connection con, Statement ps, ResultSet rs, String SQL_Str) {
        List<Team> teams = new ArrayList<Team>();
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from team";
            rs = ps.executeQuery(SQL_Str);
            Team t;
            while(rs.next()) {
                t = new Team();
                t.setId(rs.getInt("teamId"));
                t.setTeamname(rs.getString("teamName"));
                t.setYearFounded(rs.getInt("yearFounded"));
                t.setTeamCrest(rs.getString("teamCrest"));
                t.setLeaguename(rs.getString("leagueName"));
                t.setLeagueId(rs.getInt("leagueId"));
                teams.add(t);
                System.out.println(t);
            } 
            System.out.println(teams+"\nTeams");
            return teams;
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
            return null;
        }
    }

    private Team team = new Team();
    List<Team> teams = new ArrayList<Team>();

    public List<Team> getTeams() {
        teams = displayTeams(con, ps, rs, SQL_Str);
        return teams;
    }

    public void setTeams(List<Team> teams) {
        this.teams = teams;
    }


}

更新

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package database;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import java.sql.*;
import java.util.*;

@ManagedBean(name="DBConnection")
@RequestScoped
public class DBConnection {
    private String username;
    private String password;
    private String dbusername;

    public String getDbpassword() {
        return dbpassword;
    }
    public String getDbusername() {
        return dbusername;
    }

    private String dbpassword;
    Connection con;
    Statement ps;
    ResultSet rs;
    String SQL_Str;

    public void dbData(String UName)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from users where user_name like ('" + UName +"')";
            rs=ps.executeQuery(SQL_Str);
            rs.next();
            dbusername=rs.getString(2).toString();
            dbpassword=rs.getString(4).toString();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
        }
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public String checkValidUser()
    {
        dbData(username);

        if(username.equalsIgnoreCase(dbusername))
        {

            if(password.equals(dbpassword))
                return "home.xhtml";
            else
            {
                return "invalid";
            }
        }
        else
        {
            return "invalid";
        }
    }

    public List<Team> displayTeams() {
        List<Team> teams = new ArrayList<Team>();
        try
        {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/footballdb","root","");
            ps = con.createStatement();
            SQL_Str="Select * from team";
            rs = ps.executeQuery(SQL_Str);
            Team t;
            while(rs.next()) {
                t = new Team();
                t.setId(rs.getInt("teamId"));
                t.setTeamname(rs.getString("teamName"));
                t.setYearFounded(rs.getInt("yearFounded"));
                t.setTeamCrest(rs.getString("teamCrest"));
                t.setLeaguename(rs.getString("leagueName"));
                t.setLeagueId(rs.getInt("leagueId"));
                teams.add(t);
                Arrays.toString(teams.toArray());
            } 
            return teams;
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            System.out.println("Exception Occur :" + ex);
            return null;
        }
    }

    List<Team> teams = new ArrayList<Team>();

    public List<Team> getTeams() {
        teams = displayTeams();
        return teams;
    }

    public void setTeams(List<Team> teams) {
        this.teams = teams;
    }


}

现在查询正在工作,但它仍然没有显示列表。这也是我用来显示它们的页面。

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml"   
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:f = "http://java.sun.com/jsf/core">
    <head>
        <title>TODO supply a title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </head>
    <body>
        <h:dataTable value="#{DBConnection.teams}">
            <h:column>
                <f:facet name="header">ID</f:facet>
                #{t.id}
            </h:column>
            <h:column>
                <f:facet name="header">Team Name</f:facet>
                #{t.teamName}
            </h:column>
            <h:column>
                <f:facet name="header">Year Founded</f:facet>
                #{t.yearFounded}
            </h:column>
            <h:column>
                <f:facet name="header">Team Crest</f:facet>
                #{t.teamCrest}
            </h:column>
            <h:column>
                <f:facet name="header">League Name</f:facet>
                #{t.leagueName}
            </h:column>
            <h:column>
                <f:facet name="header">League ID</f:facet>
                #{t.leagueID}
            </h:column>
        </h:dataTable>



    </body>
</html>

标签: java

解决方案


如果您知道数据库表中的字段,则可以从结果集中构建字符串:

StringBuilder str = new StringBuilder();
        for (Teams teams : t) {
            str.append(t.getId() + " ");
            str.append(t.getTeamname() + " ");
            str.append(t.getYearFounded + " ");
            str.append(t.getTeamCrest + " ");
            str.append(t.getLeaguename + " ");
            str.append(t.getLeagueId()).append(" \n");
        }

并在需要时转换为字符串。

你可以试试这个功能:

// returns table from database's result set
    private Map<String, List<String>> resultSetToArrayList(ResultSet rs) throws SQLException {
        ResultSetMetaData md = rs.getMetaData();
        int columns = md.getColumnCount();
        Map<String, List<String>> map = new HashMap<>(columns);
        for (int i = 1; i <= columns; ++i) {
            map.put(md.getColumnName(i), new ArrayList<>());
        }
        while (rs.next()) {
            for (int i = 1; i <= columns; ++i) {
                String str = rs.getObject(i).toString();
                map.get(md.getColumnName(i)).add(str);
            }
        }
        return map;
    }

这将返回地图“ColumnName”-> List。但是有格式化为字符串,如果需要更改。


推荐阅读