问题描述
我已经简短地从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)内,您将执行数据库请求并映射数据。