我正在使用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()
?
我会根据要求发布更多代码。
答案 0 :(得分:1)
您可以进一步传递结果集,但这是不好的做法(参见Is it Ok to Pass ResultSet?)。从我发布的代码看,它主要是应用程序不同部分的分层问题,应该分开:
数据库相关代码属于一个层。任何其他层都不应直接与DB通信或处理任何特定于DB的对象。为实现此目的,DBConnection
类应处理所有与数据库相关的内容。要将数据从数据库传递到其他层,反之亦然,您可以使用数据传输对象(DTO),它基本上是特定结果集的对象表示。通常,这可以归结为每个数据库表一个DTO。
然后你有一个中间层,让我们称之为服务层,用于从UI到数据库进行通信并进行一些计算。
最重要的是,您拥有应用程序所在的UI层。在这里,您必须考虑哪些操作属于该层,以及最好将哪些操作委托给服务层。
另请参阅此维基百科文章:https://en.wikipedia.org/wiki/Multitier_architecture