- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前有一个非常基本的应用程序,可以与数据库交互(使用 netbeans 和 jdbc),以便您可以添加球队、球员和分数。我现在需要能够在联赛表/球队(有球员)表等中一起显示每个表中的项目。
我的问题是如何从表格中检索信息以及如何显示它,我真的不知道应该如何去做。我假设我需要执行 Join 或 Select 语句(我是一个完整的 SQL 新手),然后使用循环来选择每个表条目并以某种方式将其显示在表中?
我当前唯一的工作功能是添加到数据库,IE 添加新团队添加新玩家等,在表单上显示表格中的内容是我感到困惑的地方。
非常感谢任何提示或帮助。
我当前使用的代码是这样的; (我仍然需要实现一个分数表并向其添加记录,我还使用 GUI 创建了数据库,因此没有设置外键,有没有办法在 netbeans 中执行此操作,因为我在任何地方都没有“创建表”代码。
package football.game;
/*import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;*/
import football.game.DBconnection;
import java.sql.*;
/**
*
* @author Steffan Caine
*/
public class SportsConnection extends DBconnection {
public SportsConnection(final String dbName)
{
this.connectDatabase(dbName);
}
public void insertPlayer(final Integer PLAYERNUM,
final String PLAYERNAME, final String PLAYERPOS, final Integer TEAMNUM)
{
final String insertStmt = "INSERT INTO APP.PLAYERS (PLAYERNUM, PLAYERNAME, PLAYER_POS, TEAM_ID) VALUES (?,?, ?, ?)";
try
{
PreparedStatement pstmt = getConnection().prepareStatement(insertStmt);
pstmt.setInt(1, PLAYERNUM);
pstmt.setString(2, PLAYERNAME);
pstmt.setString(3, PLAYERPOS);
pstmt.setInt(4, TEAMNUM);
pstmt.executeUpdate();
}
catch (SQLException sqle)
{
System.out.println("Exception when inserting player record: " + sqle.toString());
}
}
public void insertTeam(final String NAME, final String MANAGER, final int ID)
{
final String insertStmt = "INSERT INTO APP.TEAMS (TEAMNAME, MANAGER, TEAM_ID) VALUES (?,?, ?)";
try
{
PreparedStatement pstmt = getConnection().prepareStatement(insertStmt);
pstmt.setString(1, NAME);
pstmt.setString(2, MANAGER);
pstmt.setInt(3, ID);
pstmt.executeUpdate();
}
catch (SQLException sqle)
{
System.out.println("Exception when inserting team record: " + sqle.toString());
}
}
public void printAllRecords()
{
this.setQuery(retrieveQuery);
this.runQuery();
ResultSet output = this.getResultSet();
try
{
if (null != output)
{
while(output.next())
{
String PLAYERNUM = output.getString(1);
String PLAYERNAME = output.getString(2);
System.out.println (PLAYERNUM + "\n" + PLAYERNAME + "\n");
}
}
}
catch (SQLException sqle)
{
System.out.println("Exception when printing all students: " + sqle.toString());
}
}
}
“retrieveQuery”当前返回一条错误消息,任何使该部分正常工作的帮助都会很棒,因为在控制台中打印记录将添加一些急需的(如果是基本的)功能。
我还为每个表单(AddPlayer/AddTeam/Navigation)提供了类,但我没有使用构造函数来填充数据库,而是使用位于主类中的方法,这是一个不好的方法吗,因为我没有使用“对象”本身?
谢谢。
最佳答案
我看到三个表:PLAYER、TEAM 和 LEAGUE。
一个团队有很多玩家;一个联赛有很多支球队。这些应该是一对多关系,因此您将拥有外键。这是一个例子:
CREATE TABLE PLAYER (
int id not null auto increment,
first_name varchar(80),
last_name varchar(80),
int team_id,
primary key(id),
foreign key(team_id) references TEAM(id)
);
CREATE TABLE TEAM (
int id not null auto increment,
name varchar(80),
primary key(id)
);
所以你可能有这样的 Java 类:
package model;
public class Player {
private Integer id,
private String name;
// ctors, getters, etc.
}
public class Team {
private Integer id,
private String name,
List<Player> players;
// ctors, getters, etc.
}
您将拥有一个持久层,其中包含所有 SQL:
package persistence;
public interface PlayerDao {
Player find(Integer id);
List<Player> find();
Integer save(Player p);
void update(Player p);
void delete(Player p);
}
这是 PlayerDao 的示例实现:
package persistence;
public class PlayerDaoImpl implements PlayerDao {
private static final String SELECT_ALL = "SELECT id, name FROM PLAYER ";
private static final String SELECT_BY_ID = SELECT_ALL + "WHERE id = ?";
private Connection connection;
public PlayerDaoImpl(Connection connection) {
this.connection = connection;
}
public Player find(Integer id) {
Player p = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = this.connection.prepareStatement(SELECT_BY_ID);
ps.setInteger(1, id);
rs = ps.executeQuery();
while (rs.next()) {
Integer pid = rs.getInteger("id");
String name = rs.getString("name");
p = new Player(id, name);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
DatabaseUtils.close(rs);
DatabaseUtils.close(ps);
}
return p;
}
}
在控制台或用户界面中打印记录确实很有用,但这应该由不同包中的不同类来完成。有一个处理这些东西的 View 层。类(class)应该做好一件事。您应该考虑适本地对应用程序进行分层。
关于java - 联赛表 - SQL 查询/JDBC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252857/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试构建一个系统,用户可以在其中轻松创建各种类型的锦标赛并与其他用户一起参与。它不针对特定游戏,而是一种通用工具,用于在任何设备上尽快查看和更新锦标赛结果,交互最少,因此实际应用程序不会妨碍
我是一名优秀的程序员,十分优秀!