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;
}

但是,从Android的databaseHelper那里,我可以轻松地运行游标,然后在循环中利用该游标中的数据,依此类推,我发现上面的“ defaultCallback”方法非常严格。

因此,我的问题是: 是否有提示/技巧来增加灵活性?为了使其更类似于您在Java中使用resultSet或在Android中使用Cursor的方式?

解决方法

首先,我现在不愿意使用GWT RPC。我将采用REST-ful方法。例如,domino-rest(https://github.com/DominoKit/domino-rest)是在客户端使用的出色实现。在服务器端,您可以使用Spring Boot或jersey或类似的东西提供宁静的服务。除此之外,您还需要一个单独的数据模型来将结果传输到客户端(需要序列化和反序列化才能传输)。在服务器端,您将拥有一个资源,该资源将执行数据库请求并将结果映射到数据对象中。

在这里您将找到一个示例:

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)内,您将执行数据库请求并映射数据。