gpt4 book ai didi

java - 如何从webservice返回SQL查询结果

转载 作者:行者123 更新时间:2023-11-30 03:03:20 25 4
gpt4 key购买 nike

我想制作一个能够以三层架构将sql查询结果返回到客户端的服务。由于表的大小很大,我无法将结果值转换为 String (堆空间错误)。所以我尝试返回其他类型。我希望它能回来 Vector<Vector<Object>>输入 DefaultTableModel可以简单地使用如下的Web服务代码

public Vector<Vector<String>> ReturnSet()
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con = DriverManager.getConnection(url, user, password);
SQL = "Select * from table";
pst = con.prepareStatement(SQL);
Check = pst.executeQuery();
ResultSetMetaData metaData = Check.getMetaData();
int columnCount = metaData.getColumnCount();
Vector<Vector<String>> Vecs = new Vector<Vector<String>>();
Vector<String> cn = new Vector<String>();
for (int i = 0; i < columnCount; i++)
cn.add(metaData.getColumnName(i+1));
Vecs.add(cn);
while (Check.next())
{
Vector<String> Vec = new Vector<String>();
for (int i = 0; i < columnCount; i++)
Vec.add(Check.getString(i+1));
Vecs.add(Vec);
}
return Vecs;
}
catch(SQLException e)
{
return null;
}
}

在客户端,我使用 Netbeans IDE 创建了 Web 服务客户端。服务生成的代码如下所示,

private static java.util.List<usesql.Vector> returnSet() {
usesql.WS_Service service = new usesql.WS_Service();
usesql.WS port = service.getWSPort();
return port.returnSet();
}

但是每次我打电话returnSet()时,程序卡住了,日志或控制台没有错误。我的问题是让它工作(类型不限),感谢您的帮助。

最佳答案

我认为问题更多地与数据大小有关。如果表很大并且包含大量数据,那么根据用户请求返回它就没有意义。

服务器上会消耗大量内存。如果许多用户同时请求数据(调用 Web 服务)怎么办?

此外,也许客户端会被如此大的数据量淹没而导致内存不足。

数据库在这里也努力工作,试图返回所有数据。

所以我认为你应该重新考虑处理如此大量数据的策略。为此有许多有趣的技术。

  1. 分页:

    您真的确定客户端需要查看所有数据吗?也许公开几个按钮(上一个/下一个)并在单击时使用一些分页参数调用 Web 服务是有意义的

  2. 动态模型:

    我可能是错的,但从表模型类的名称来看,我以某种方式推断出您正在使用 Swing(但这并不重要,它可以是 Web、SWT 或其他任何形式)。

    在这种情况下,也许您应该提供某种监听器,当用户滚动数据时,该监听器会触发后台数据加载(Web 中的 Swing/AJAX 中的线程)。

关于java - 如何从webservice返回SQL查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com