【问题标题】:Referencing ResultSet/Using the Next() method引用 ResultSet/使用 Next() 方法
【发布时间】:2016-02-08 22:07:42
【问题描述】:

我正在使用 JavaFX 创建一个基本的 GUI。我在 MySQL 中创建了一个数据库来存储数据。 (DBConnect) (连接器/j)

这是我第一次尝试连接两者,以及使用 ResultSets/DBConnect

目前,我有 3 个类:我的 Game 类、我的 GameUI 类(主)和我的 DBConnect 类。

我试图在我的 GameUI 类中引用 ResultSet,它最初是在 Game 类中声明的。

public class Game {

    private static DBConnect dbc;
    private static Connection conn;
    public ResultSet rs;
    int id;
    String name;
    float price;
    String vendor;
    int rating;


    public Game() {

        try {
            conn = dbc.connect();

            String SQL = "Select * from Person";

            rs = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(SQL);

            System.out.println("list result set for record..");
            printRs(rs);
        } catch(SQLException ignore) {

        }
    }

我的用户定义 moveNext() 方法:

   public Game moveNext() {
        Game g = new Game();
        try {

            if(rs.next() == false)
                rs.previous();
            g.setGameId(rs.getInt("gameId"));
            g.setGameName(rs.getString("gameName"));
            g.setPrice(rs.getFloat("price"));
            g.setVendor(rs.getString("vendor"));
            g.setRating(rs.getInt("rating"));

        } catch(SQLException e) {
            e.printStackTrace();
        }

        return g;
    }

我试图在其中引用它的 GameUI 类:

public class GameUI extends Application {
    private Button firstButton = new Button("First");
    private Button createButton = new Button("Create");
    private Button updateButton = new Button("Update");
    private Button deleteButton = new Button("Delete");
    private Button lastButton = new Button("Last");
    private Button nextButton = new Button("Next");
    private Button prevButton = new Button("Prev");
    GridPane grid = new GridPane();
    HBox hbox = new HBox(14);






    private static DBConnect dbc;
    private static Connection conn;
   // private static



    private Pane initButtons() {
        hbox.getChildren().addAll(firstButton, createButton, updateButton, deleteButton, lastButton, nextButton, prevButton);

        nextButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {

                Game.rs.moveNext();
            }
        });

    return hbox;

    }

我的问题是,我可以在nextButton 事件处理程序(我的 GameUI 类)中引用我的 ResultSet(游戏类)还是必须声明一个新的结果集?

这是我用户定义的moveNext() 方法的正确位置,还是我应该使用next()

我会根据要求发布更多代码。

【问题讨论】:

  • 您的帖子包含三个不同的问题。最好将它们作为单独的问题。

标签: mysql jdbc javafx


【解决方案1】:

您可以进一步传递结果集,但这是不好的做法(请参阅Is it Ok to Pass ResultSet?)。从我从您发布的代码中看到,这主要是应用程序不同部分的分层问题,应该分开:

数据库相关代码属于一层。任何其他层都不应直接与 DB 对话或处理任何 DB 特定对象。为了实现这一点,DBConnection 类应该处理所有与数据库相关的东西。要将数据从数据库传递到其他层,反之亦然,您需要使用数据传输对象 (DTO),它基本上是特定结果集的对象表示。通常这归结为每个数据库表一个 DTO。

然后你有一个中间层,我们称之为服务层,它用于从 UI 到数据库进行通信并进行一些计算。

除此之外,您还有应用程序所在的 UI 层。在这里,您必须考虑哪些操作属于该层,哪些应该更好地委托给服务层。

还可以查看这篇维基百科文章:https://en.wikipedia.org/wiki/Multitier_architecture

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多