GWT、RPC和SQL,您的结果集是保留在服务器端,还是可以在客户端使用它



为了让我的应用程序现在可以在线运行,我已经从Android短暂地更改为GWT。

我意识到Android应用程序和GWT项目有很多不同,但其中之一,我无法理解,所以也许你们中的一些人可以帮我澄清。

我可以通过RPC访问我的数据库,并且我可以通过带有onFailure和OnSuccess的DefaultCallback将这些数据发送到我的GUI。像这样:

@Override
public void sayHello(String name) {
this.serviceAsync.sayHello(name,  new DefaultCallback());
}
private class DefaultCallback implements AsyncCallback {
@Override
public void onFailure(Throwable caught) {
System.out.println("An error has occured");
}
@Override
public void onSuccess(Object result) {
System.out.println("Response received");
if (result instanceof String) {
mainGUI.updateLabel(String.valueOf(result));
}
}
}

SQL在我访问这里的数据库时发挥作用,对吧?,所以让我们说我想填写一张账目表。我会访问该表,进行循环,然后填充该表。

我这样使用SQL:

Connection c = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("server");
}
catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
return c;

这样的结果集:

ResultSet myGet(Connection db, String sql){
try {
return db.createStatement().executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}

然而,从安卓系统中的数据库助手开始,我可以很容易地运行光标,然后在循环等中使用来自该光标的数据,我发现;defaultCallback";上面的方法是非常非常严格的。

因此,我的问题是:有什么技巧可以增加灵活性吗?那么,为了让它更类似于你在Java中使用resultSet或在Android中使用Cursor的方式呢

首先,我现在不会使用GWT RPC。我会采用RESTful方法。例如多米诺骨牌休息(https://github.com/DominoKit/domino-rest)是一个很好的客户端实现。在服务器端,您可以使用SpringBoot或jersey或类似的东西来提供restful服务。此外,您需要一个单独的数据模型来将结果传输到客户端(需要对其进行序列化和反序列化以进行传输(。在服务器端,您将拥有一个资源,它执行数据库请求并将结果映射到数据对象中。

在这里你可以找到一个例子:

https://github.com/NaluKit/nalu-examples/tree/master/devkexample

PersonService类内部(https://github.com/NaluKit/nalu-examples/blob/master/devkexample/devkexample-server/src/main/java/de/gishmo/example/devk/server/service/PersonService.java)您将执行数据库请求并映射数据。

最新更新