java - 在 JSF 中显示通过 SQL 填充的 ArrayList
问题描述
所以在下面的代码中,我想运行一个查询来获取一个充满“团队”的表并将它们显示在页面上。但是它们没有显示。我可能认为这是查询的问题,但我对JavaJSF
或SQL
通过 Java 并不了解。我正在尝试使用 System.out.print 显示查询的内容以尝试缩小问题范围,但无济于事。
抱歉,我没有指定我正在使用ArrayList
. 通过 SQL 填充它并将其显示在xhtml
文件中。
/*
* 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>
解决方案
如果您知道数据库表中的字段,则可以从结果集中构建字符串:
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。但是有格式化为字符串,如果需要更改。
推荐阅读
- bash - Bash遍历目录中的文件输出不存在的文件
- r - 将 OTU 表转换为 betapart 包的二进制表
- sql - 将 SQL 中的结果从正数更改为负数
- amazon-web-services - API GATEWAY 未检索请求正文
- node.js - 如何使用 puppeteer 关闭或取消 http 身份验证窗口?
- c - 如何定义和初始化包含结构体数组的 C 结构体
- reactjs - 在同一个组件中调用自定义钩子两次
- scala - 对象 kafka010 不是包 org.apache.spark.streaming 的成员
- vue.js - 在虚拟文件系统 DataTable 中找不到未捕获的(承诺)文件“Roboto-Regular.ttf”-vuejs
- javascript - TypeError:无法读取未定义的属性“有” // Discord.js