Tamanho em bytes dos registros selecionados

Olá Pessoal

Dentre as funcionalidades de um sistema que estou participando, que seria um download de conteúdo para um sistema offline.
Isto está sendo feito através de webservices.

Alguém sabe se é possível provisionar a o tamanho deste download, alguma função no banco que traz o tamanho dos registros em bytes… ou algo do tipo?
O ruim de tentar fazer isso via código java é que eu teria realmente que simular os selects para o obter este tamanho… e acredito que iria onerar o processamento.

Se alguém souber algo e puder me ajudar…

Obrigada.

No banco, se você tiver campos blob, não. Mas depois de montar o buffer que será enviado, deve ser fácil estimar o tamanho dos dados lá, no Java mesmo.

Se não tiver campos blob, basta olhar o tamanho de cada tipo de dado do banco. Essa informação geralmente está disponível no manual do BD. Em seguida, use o ResultSetMetaData para descobrir no Java o tipo das colunas e estimar o seu tamanho.

É mais confiável fazer essa estimativa no Java, pois muitos dados sofrem conversão quando você os lê no JDBC.

Um comentário nada a ver, sobre sua frase:
“Os primeiros 90% de uma tarefa demora 90% de tempo a executar. Os restantes 10% demora outros 90%.” (Murphy)

Além do mau português, essa frase não tem nada a ver com Leis de Murphy. Ele parece ser uma versão modificada do princípio de Paretto:

Ele diz que “80% dos fenômenos vem de 20% das causas”.
Aplicando para o caso de software, 80% da demora de um software está em apenas 20% do código".

Obrigada por ambas explanações, vou tentar fazer alguns testes aqui.

Olá Pessoal… só pra compartilhar…

Encontrei um forma de fazer via Banco de dados como eu queria.

Estou usando Oracle, para campos do tipo LOB é possivel obter os bytes desta forma:
select dbms_lob.getlength(CAMPO) data_size from TABELA

Para outros tipos de dados é possivel através da função LENGTHB:
select LENGTHB(CAMPO) data_size from TABELA

Legal, mas é como expliquei. Alguns tipos de dados tem tamanhos diferentes no Java, no banco e no seu protocolo. Por exemplo, não é incomum que o banco use uma codificação de texto (com 1 byte por caracter), o Java use Unicode (2 bytes) e você opte por transmitir o dados em ascii.

Por isso, talvez seja mais interessante medir o pacote depois de transformado no Java, quando ele estiver pronto para ser transmitido.

O banco de dados é um recurso tão crítico quanto o servidor de aplicação. Mover código para ele também é igualmente ruim. Eu diria, até pior, do que deixar no servidor de aplicação, pois geralmente é difícil aumentar o número de máquinas de banco, enquanto é fácil aumentar o número de máquinas de aplicação.