Fala Galera java! Acabo de me recadastrar e trago um probleminha para resolver. Estou escrevendo uma aplicação que usa db Oracle, o problema é que esta muito lento. Tenho que fazer 140 selects na base de dados o que justifica ser uma aplicação pesada por natureza. Mesmo assim ai vai o código para ver se alguém consegue otimizar.
Bom estar de volta!
Abraço a todos e obrigado.
import java.util.*;
import java.io.*;
import java.sql.*;
public class SelectEdita {
protected static String retorno = "";
protected static String pageSelect(String data, int sala, int turno) {
StringBuffer html = new StringBuffer();
Busca_CD_Escala esc = new Busca_CD_Escala();
html.append("<select name=\"esc_servico\">");
html.append("<option value=\"" + esc.cdVazio(data,sala,turno) + "\">");
try {
//Cria conexão com a base de dados
Connection con = DataConnect.connectDb();
Statement stmt = con.createStatement();
String sql = "select cd_servico, ds_servico, sum(cd_escala) as cd_escala, sum(cd_sal_cir), sum(tp_turno) " +
"from ( " +
"select e.cd_servico as cd_servico, s.ds_servico as ds_servico, e.cd_escala as cd_escala, e.cd_sal_cir as cd_sal_cir, e.tp_turno as tp_turno " +
"from dbamv.escala_cirurgia e, dbamv.servico s " +
"where e.dt_escala = '" + data + "' " +
"and e.cd_sal_cir = '" + sala + "' " +
"and e.tp_turno = '" + turno + "' " +
"and e.cd_servico = s.cd_servico(+) " +
"union " +
"select s.cd_servico, s.ds_servico, 0, 0, '0' " +
"from dbamv.servico s " +
"where s.sn_pre_internacao = 'S' ) " +
"group by cd_servico, ds_servico";
ResultSet rs = stmt.executeQuery(sql);
//faz primeira busca no banco de dados
while (rs.next()){
int cd_escala = rs.getInt("cd_escala");
int ecd_servico = rs.getInt("cd_servico");
//int scd_servico = rs.getInt("cd_servico");
String sds_servico = rs.getString("ds_servico");
html.append("<option value=\"");
html.append(esc.cdEscala(data, sala, turno));
html.append(":"+ecd_servico);
html.append(":"+data);
html.append(":"+sala);
html.append(":"+turno);
html.append("\"");
if ( cd_escala > 0 ){
html.append(" selected");
}
//if (ecd_servico == 0){
//html.append("");
//}
html.append(">");
html.append(sds_servico);
}
//tenta fechar a conexão com o banco de dados
try {
con.close();
} catch(Exception e) {
e.printStackTrace();
}
//pega erro (se houver na query)
} catch(Exception e) {
e.printStackTrace();
}
//fecha select
html.append("</select>");
retorno = html.toString();
return retorno;
}
}
import java.util.*;
import java.io.*;
import java.sql.*;
public class Busca_CD_Escala {
protected static String retorno = "";
protected static String cdEscala(String data, int sala, int turno) {
StringBuffer html = new StringBuffer();
try {
//Cria conexão com a base de dados
Connection con = DataConnect.connectDb();
Statement stmt = con.createStatement();
String sql = "select cd_escala from dbamv.escala_cirurgia " +
"where dt_escala = '" + data + "' " +
"and cd_sal_cir = '" + sala + "'" +
"and tp_turno = '" + turno + "'";
ResultSet rs = stmt.executeQuery(sql);
//faz primeira busca no banco de dados
while (rs.next()){
int cd_escala = rs.getInt("cd_escala");
html.append(cd_escala);
}
//tenta fechar a conexão com o banco de dados
try {
con.close();
} catch(Exception e) {
e.printStackTrace();
}
//pega erro (se houver na query)
} catch(Exception e) {
e.printStackTrace();
}
retorno = html.toString();
return retorno;
}
protected static String retorna = "";
protected static String cdVazio(String data, int sala, int turno) {
StringBuffer html = new StringBuffer();
try {
//Cria conexão com a base de dados
Connection con = DataConnect.connectDb();
Statement stmt = con.createStatement();
String sql = "select * from dbamv.escala_cirurgia " +
"where dt_escala = '" + data + "' " +
"and cd_sal_cir = '" + sala + "'" +
"and tp_turno = '" + turno + "'";
ResultSet rs = stmt.executeQuery(sql);
//faz primeira busca no banco de dados
while (rs.next()){
int cd_servico = rs.getInt("cd_servico");
int cd_escala = rs.getInt("cd_escala");
html.append(cd_escala);
html.append(":"+cd_servico);
html.append(":"+data);
html.append(":"+sala);
html.append(":"+turno);
}
//tenta fechar a conexão com o banco de dados
try {
con.close();
} catch(Exception e) {
e.printStackTrace();
}
//pega erro (se houver na query)
} catch(Exception e) {
e.printStackTrace();
}
retorna = html.toString();
return retorna;
}
}
São setenta selects na base para popular o select, e mais setenta para popular uma parte do combo atravéz da classe Busca_CD_Escala.
Aguardo a ajuda dos gurus!