Я хочу сделать сервис, который сможет вернуть результат запроса sql на клиентскую сторону в трехъярусной архитектуре. С огромным размером таблицы я не могу превратить значение результата в String
(ошибка пространства кучи). Поэтому я попробовал вернуть другие типы. Я надеюсь, что он может вернуться Vector<Vector<Object>>
типа, который DefaultTableModel
можно просто использовать, код WebService как нижекак вернуть результат SQL-запроса из webservice
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 для клиента создан WebService. служба сгенерированный код, как показано ниже,
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()
, программа просто застрял, без ошибок из журнала или консоли. Мой вопрос заключается в том, чтобы заставить его работать (тип не является пределом), спасибо за любую помощь.
Спасибо за ответ, но у меня есть еще один вопроса здесь. Есть ли лучший способ, который быстрее, чем возвращаемый тип String? Я думаю, что это вызовет слишком много времени, если придется превращать эти данные в String. – TomN
Теперь я попытался сделать 'Vector' сериализацией в' String'. например http://stackoverflow.com/questions/6610608/java-web-services-and-returning-vectorvectorobject – TomN
В зависимости от типа клиентских и системных требований вы можете использовать текстовые (строковые), бинарные протоколы (Thrift, Avro, Google Protobuf) и т. Д. Бинарные протоколы более компактны (вы можете передавать меньше данных по проводке + без HTTP-ресурсов), но вам может потребоваться много работать на сервере для кодирования данных в двоичный поток. Если вы идете в двоичном виде, вы не получите веб-сервисы REST/Soap (на практике они работают через HTTP). Итог, как я уже сказал, лучше изменить поток.Передача огромного количества данных всегда плохая идея :) –