Seria interessante fazer uma página JSP (ou servlet, ou ASP, ou PHP, ou seja o que você rode no seu web server) que faça a tal conexão e obtenha os dados, e os mande em formato “texto” para sua applet. É muito mais seguro que fazer a applet conectar-se diretamente ao banco .
Não é que seja mais rápido, mas é muito mais seguro, e irá permitir a sua aplicação ser acessada via Internet (porque você não vai precisar abrir conexão diretamente no banco).
Além disso, você não vai mais ter problemas com conexões ao banco feitas diretamente a partir do browser (que costumam ficar “penduradas”, por mais que você tente).
Qual é o web server que vocês usam? Microsoft IIS? Apache? Tomcat? Dá para usar PHP? JSP? o quê, afinal?
A idéia é que uma página (sem formatação nenhuma, talvez XML) receba a consulta, conecte-se ao banco, e retorne os dados (formatados de modo a ficar fácil de processá-los na sua applet - digamos que seja em formato CSV, por exemplo).
Se você vai processar os dados em JSP é bastante simples.
Passe os dados de consulta (talvez via GET) para essa JSP, processe-os, e volte o resultado.
A applet pode usar a classe URLConnection para chamar o JSP e receber o resultado.
Em que JVM roda a sua applet? Em Sun JRE 1.4 ou superior, ou tem de rodar com qualquer Java (incluindo o da Microsoft)?
Se puder usar o Java da Sun, o seu JSP pode voltar um XML que a applet pode processar, por exemplo.
Legal, talvez dê até para tentar usar um recurso novo do JDBC que é o uso de “CachedRowSet” - uma forma “desconectada” de um ResultSet. A idéia é que o JSP lhe retornasse uma forma “serializada” do ResultSet e essa forma seja “desserializada” (que palavra horrível) no seu applet.
Estou com um problema semelhante, nao estou conseguindo acessar o banco oracle pela applet, fiquei sabendo ontem que preciso assinar a applet, mas agora vendo o sua dica sobre usar jsp, entao pergunto, e uma servlet, tbem funcionaria para fazer a comunicação entre minha applet e o banco.
No stand-alone eu sei como chamar uma aplicação atraves de outra, mas em applet, como faço isso?
Agradeço a quem puder me ajudar.
Ola pessoal, antes de mais nada queria agradecer o pessoal que participa do forum, pois a 2 semanas atras, eu nao sabia nem por onde começar a conexao com o banco, valeu mesmo. Estou desenvolvendo um formulario de cadastro em applet para se comunicar com uma servlet que por sua vez se comunica com o banco, enviando as informações da applet para o banco oracle, porem a applet nao esta enviando as informações, a servlet sei que esta funcionando pois criei uma pagina html e as informações chegaram ao banco. Eu nao sei como testar, como fazer com que a servlet envie uma informação de erro ou sucesso para applet. Onde estou errando na applet que nao esta sendo enviando dados para servlet?
Segue abaixo o meu codigo applet e servlet, quem puder me ajudar, agradeço…
package HDC.Servlet;
import java.io.;
import java.net.;
import javax.servlet.http.;
import java.sql.SQLException;
import java.sql.ResultSet.;
import java.sql.;
import java.io.;
import javax.swing.;
import java.awt.event.;
import java.awt.;
import java.util.Date;
import javax.servlet.;
import javax.servlet.http.*;
public class ServletHDC extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
ResultSet rs;
Statement stm = null;
Connection con = null;
String SQL = null;
String URL = null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
URL = "jdbc:oracle:thin:HDC/HDC@localhost:1521:OLTP";
con = DriverManager.getConnection(URL);
stm = con.createStatement();
SQL = "INSERT INTO USUARIO (COD_USUARIO, NOM_USUARIO, CPF, DATA_NASCTO, ENDERECO, BAIRRO, SEQ_CIDADE, CEP, " +
“SEQ_INST, SEQ_CARGO, SEQ_USUARIO) values (’”+request.getParameter(“COD_USUARIO”)+"’,’"+request.getParameter(“NOM_USUARIO”)+"’,’"+
request.getParameter(“CPF”)+"’,’"+request.getParameter(“DATA_NASCTO”)+"’,’"+request.getParameter(“ENDERECO”)+"’,’"+
request.getParameter(“BAIRRO”)+"’,’"+request.getParameter(“SEQ_CIDADE”)+"’,’"+request.getParameter(“CEP”)+"’,’"+
request.getParameter(“SEQ_INST”)+"’,’"+request.getParameter(“SEQ_CARGO”)+"’,’"+request.getParameter(“SEQ_USUARIO”)+"’)";
rs = stm.executeQuery(SQL);
rs = stm.executeQuery("COMMIT");
response.setContentType("text/html");
out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("A gravação foi feita com Sucesso");
out.println("</body>");
out.println("</html>");
out.close();
}catch(Throwable ex)
{
JOptionPane.showMessageDialog(null,“Erro”);
response.setContentType("text/html");
out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println(ex.getMessage());
out.println("Erro no SQL");
out.println("</body>");
out.println("</html>");
out.close();
}
}
}
package Applet.Work_User;
import java.sql.SQLException;
import java.sql.ResultSet.;
import java.sql.;
import java.io.;
import javax.swing.;
import java.awt.event.;
import java.awt.;
import java.applet.Applet;
import java.net.URLConnection.;
import java.net.URLEncoder;
import java.net.URLEncoder.;
import java.net.URLConnection;
import java.net.URL.*;
import java.net.URL;
public class Frm_Usuario extends javax.swing.JApplet {
public void init() {
initComponents();
}
private void initComponents()
{
jButton1 = new javax.swing.JButton();
jButton8 = new javax.swing.JButton();
jButton10 = new javax.swing.JButton();
jButton9 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextField7 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jButton2 = new javax.swing.JButton();
jTextField9 = new javax.swing.JTextField();
jTextField5 = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jTextField6 = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
jTextField8 = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
jTextField10 = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
jButton3 = new javax.swing.JButton();
jTextField11 = new javax.swing.JTextField();
jTextField12 = new javax.swing.JTextField();
jLabel10 = new javax.swing.JLabel();
jButton4 = new javax.swing.JButton();
jTextField13 = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
jTextField14 = new javax.swing.JTextField();
getContentPane().setLayout(null);
jButton1.setText("Novo");
jButton1.setMargin(new java.awt.Insets(2, 2, 2, 14));
getContentPane().add(jButton1);
jButton1.setBounds(10, 10, 100, 40);
jButton8.setText("Excluir");
jButton8.setMargin(new java.awt.Insets(2, 2, 2, 14));
getContentPane().add(jButton8);
jButton8.setBounds(120, 10, 100, 40);
jButton10.setText("Salvar");
jButton10.setMargin(new java.awt.Insets(2, 2, 2, 14));
jButton10.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton10ActionPerformed(evt);
}
});
getContentPane().add(jButton10);
jButton10.setBounds(230, 10, 100, 40);
jButton9.setText("Sair");
jButton9.setMargin(new java.awt.Insets(2, 2, 2, 14));
getContentPane().add(jButton9);
jButton9.setBounds(340, 10, 100, 40);
jLabel1.setText("COD_USUARIO");
getContentPane().add(jLabel1);
jLabel1.setBounds(10, 140, 100, 15);
getContentPane().add(jTextField1);
jTextField1.setBounds(10, 160, 220, 21);
getContentPane().add(jTextField2);
jTextField2.setBounds(290, 160, 430, 21);
jLabel2.setText("NOM_USUARIO");
getContentPane().add(jLabel2);
jLabel2.setBounds(290, 140, 110, 15);
jLabel3.setText("CPF");
getContentPane().add(jLabel3);
jLabel3.setBounds(290, 210, 50, 15);
getContentPane().add(jTextField3);
jTextField3.setBounds(290, 230, 150, 21);
getContentPane().add(jTextField4);
jTextField4.setBounds(620, 230, 150, 21);
jLabel4.setText("DATA_NASCTO");
getContentPane().add(jLabel4);
jLabel4.setBounds(620, 210, 90, 15);
getContentPane().add(jTextField7);
jTextField7.setBounds(490, 300, 70, 21);
jLabel5.setText("SEQ_CIDADE");
getContentPane().add(jLabel5);
jLabel5.setBounds(490, 280, 120, 15);
jButton2.setText("...");
getContentPane().add(jButton2);
jButton2.setBounds(570, 295, 40, 30);
getContentPane().add(jTextField9);
jTextField9.setBounds(620, 300, 200, 21);
getContentPane().add(jTextField5);
jTextField5.setBounds(10, 300, 430, 21);
jLabel6.setText("ENDERECO");
getContentPane().add(jLabel6);
jLabel6.setBounds(10, 280, 110, 15);
getContentPane().add(jTextField6);
jTextField6.setBounds(10, 370, 430, 21);
jLabel7.setText("BAIRRO");
getContentPane().add(jLabel7);
jLabel7.setBounds(10, 350, 80, 15);
getContentPane().add(jTextField8);
jTextField8.setBounds(490, 370, 150, 21);
jLabel8.setText("CEP");
getContentPane().add(jLabel8);
jLabel8.setBounds(490, 350, 60, 15);
getContentPane().add(jTextField10);
jTextField10.setBounds(10, 440, 70, 21);
jLabel9.setText("SEQ_INST");
getContentPane().add(jLabel9);
jLabel9.setBounds(10, 420, 60, 15);
jButton3.setText("...");
getContentPane().add(jButton3);
jButton3.setBounds(90, 435, 40, 30);
getContentPane().add(jTextField11);
jTextField11.setBounds(140, 440, 200, 21);
getContentPane().add(jTextField12);
jTextField12.setBounds(490, 440, 70, 21);
jLabel10.setText("SEQ_CARGO");
getContentPane().add(jLabel10);
jLabel10.setBounds(490, 420, 80, 15);
jButton4.setText("...");
getContentPane().add(jButton4);
jButton4.setBounds(570, 435, 40, 30);
getContentPane().add(jTextField13);
jTextField13.setBounds(620, 440, 200, 21);
jLabel11.setText("SEQ_USUARIO");
getContentPane().add(jLabel11);
jLabel11.setBounds(10, 200, 110, 15);
getContentPane().add(jTextField14);
jTextField14.setBounds(10, 220, 70, 21);
}
private void jButton10ActionPerformed(java.awt.event.ActionEvent evt)
{
try
{
String urlServlet = "http://127.0.0.1:9090/servlets-examples/ServletHDC?COD_USUARIO="+URLEncoder.encode(jTextField1.getText())+
"NOM_USUARIO="+URLEncoder.encode(jTextField2.getText())+"CPF="+URLEncoder.encode(jTextField3.getText())+
"DATA_NASCTO="+Integer.parseInt(URLEncoder.encode(jTextField4.getText()))+"ENDERECO="+URLEncoder.encode(jTextField5.getText())+
"BAIRRO="+URLEncoder.encode(jTextField6.getText())+"SEQ_CIDADE="+Integer.parseInt(URLEncoder.encode(jTextField7.getText()))+
"CEP="+URLEncoder.encode(jTextField8.getText())+"SEQ_INST="+URLEncoder.encode(jTextField10.getText())+
"SEQ_CARGO="+Integer.parseInt(URLEncoder.encode(jTextField12.getText()))+"SEQ_USUARIO="+Integer.parseInt(URLEncoder.encode(jTextField14.getText()));
URLConnection urlcon = null;
URL url = new URL(urlServlet);
urlcon = url.openConnection();
urlcon.setDoInput(true);
urlcon.setDoOutput(true);
urlcon.setUseCaches(false);
urlcon.setDefaultUseCaches(false);
urlcon.setRequestProperty("Content-type","applcation/octet-stream");
BufferedReader inputFromServlet = new BufferedReader(new InputStreamReader(urlcon.getInputStream()));
JOptionPane.showMessageDialog(null,"Conexao realizada com sucesso");
}
catch(Throwable e)
{
JOptionPane.showMessageDialog(null,e.getMessage());
}
}//GEN-LAST:event_jButton10ActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton10;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton8;
private javax.swing.JButton jButton9;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField10;
private javax.swing.JTextField jTextField11;
private javax.swing.JTextField jTextField12;
private javax.swing.JTextField jTextField13;
private javax.swing.JTextField jTextField14;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
private javax.swing.JTextField jTextField7;
private javax.swing.JTextField jTextField8;
private javax.swing.JTextField jTextField9;
// End of variables declaration//GEN-END:variables
public void fonteDeDados()
{
JOptionPane.showMessageDialog(null,"Problemas na conexao com fonte de dados");
}
public void gravaçãoSucesso()
{
JOptionPane.showMessageDialog(null,"Gravação foi feita com Sucesso");
}
public void limpaCampos()
{
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
jTextField5.setText("");
jTextField6.setText("");
jTextField8.setText("");
}
}
Agradeço a quem puder me ajudar…
Pessoal, estou precisando de uma dica…
Estou desenvolvendo uma aplicação gerencial (Applet) pra empresa em que trabalho com banco de dados em Oracle. Existe uma janela (jinternalframe) que conecta no banco de dados e tem uma tabela que mostra o resultado do select. Aproximadamente 2000 registros existentes da tabela do banco em que a jtable pesquisa.
Localmente, a velocidade é uma beleza, mas uma conexão externa é muito pesado. Quando abre a janela (jinternalframe) demora mais ou menos 30 segundos pra abrir a janela com o resultado na jtable.
Eu queria saber se existe alguma forma de eu fazer o applet não rodar no cliente, só no servidor.
Valeu moçada.
[quote=thingol]Seria interessante fazer uma página JSP…
[/quote]
Isso a tornaria mais rápido ?
Tu pode me passar um exemplo?
Valeu velho…
Bom, estou instalando agora mesmo o Tomcat.
Mas eu tenho o Microsoft IIS, roda JSP.
JRE 6
Legal. A idéia parece ótima!
Vou pesquisar sobre o assunto…
É, pra conectar um applet a um banco de dados tem que estar assinado.
Mas a dica do pessoal é não usar o applet pra conectar diretamente com o banco. Para isso é melhor trabalhar com alguma coisa do tipo JSP, Servlet…
Eu não entendo nada de JSP, tu tem algum exemplo de JSP + Applet ?