引用ResultSet /使用Next()方法

时间:2015-11-07 23:49:47

标签: mysql jdbc javafx

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

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

目前,我有3个Classes:我的Game类,我的GameUI类(main)和我的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()

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

1 个答案:

答案 0 :(得分:1)

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

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

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

最重要的是,您拥有应用程序所在的UI层。在这里,您必须考虑哪些操作属于该层,以及最好将哪些操作委托给服务层。

另请参阅此维基百科文章:https://en.wikipedia.org/wiki/Multitier_architecture