Ir para conteúdo
Fórum Script Brasil
  • 0

Probleminha


Wicker Man

Pergunta

E aí, pessoas? Tranqüilo?

Aí, estou com uma duvidazinha. Meu programa tem aproximadamente a seguinte forma:

try {

   // aqui eu estou bulindo com bd (conexão, etc.)
   // e executo o seguinte comando SQL:
   // INSERT INTO mytable ( campo1, campo2 ) VALUES ( '" + var1 + "', '" + var2 "' )

} catch ( SQLException e ) {
   JOptionPane.showMessageDialog( null, "Erro: " + e.getMessage() );
}

Aí então, quando o usuário entra com os dados a serem inseridos no BD, aparece uma mensagem na tela que diz "Erro: no ResultSet was created". Sei que isso não é preocupante para o cliente (uma vez que a instrução é executada e os dados inseridos) mas gostaria de saber o que significa ao certo e como tratar?

Valeu! wink.gif

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Cara veja a estrutura certa disso que você ta fazendo, aconcelho a usar PreparedStatement é melhor para se organizar..olhe o exemplo:

String sqls="insert into Principal values(?,?)";
    try{
    	con=c.getConect();
    	PreparedStatement ps=con.prepareStatement(sqls);
    	ps.setInt(1,id);
    	ps.setString(2,nomeCad.toUpperCase());
    	int i=ps.executeUpdate();


você deve setar a variável corretamente

int id=3;

String nomeCad="EU";

No caso você deve setar o conteudo digitádo pelo usuário certo???

seria:

String nomeCad=txCampo.getText();

Qualquer coisa pergunte ai

Link para o comentário
Compartilhar em outros sites

  • 0

Aí, cara, valeu mais uma vez, mas num deu pra pegar o que você falou... unsure.gif

Tipo, mais exatamente, o que eu não entendi foi os argumentos dos métodos "setInt()" e "setString()" e o que eles fazem, e qual a vantagem de se usar o "PreparedStatement", o que o diferencia do "Statement".

Eu consegui informações de um duende que mora numa árvore falante e resolvi o problema trocando o "executeQuery()" por "executeUpdate()" (mas mantendo o "Statement").

Até depois! laugh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Diz ae Wicker!

O erro estava acontecendo por que o update, diferente do select, não retorna nada ao programa. Assim sendo, não ResultSet nenhuma para ser capturada. Então você deve sempre usar o ExecuteUpdate() quando nada for retornado, beleza?

Quanto ao uso do PreparedStatement, realmente ajuda um bocado. Dê uma olhada em um exemplo retirado da própria documentação:

   PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592)

Se não deu pra pegar a lógica da coisa, é assim: primeiro, prepara-se um PreparedStatement com interrogações onde deveriam estar os argumentos. A seguir, você define essas interrogações. E, no fim, você chama o método ExecuteUpdete(), ou o que quer que seja.

Dessa forma, se você precisar atualizar novamente, você não precisa mais redigitar "UPDATE EMPLP....". Basta setar os argumentos e realizar nova atualização.

Ok? tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Valeu mesmo, caras! smile.gif

Mas agora, com o PreparedStatement, a mensagem de erro da exceção é "Driver does not support this function".

O comando SQL é:

String CommandSQL = "UPDATE mymusic SET artista = ? WHERE musica = ?";
E as linhas de acesso:
try {

   Connection c = acss.AcessarDB();
  
   PreparedStatement s = c.prepareStatement( CommandSQL );
      
   s.setString( 1, art );
   s.setString( 2, mus );
  
   s.executeUpdate( CommandSQL );
      
} catch( SQLException e ) {
  	
   JOptionPane.showMessageDialog( null, "Erro na execução: " + e.getMessage() );
  	
} finally {
  	
   acss.fecharCon();
  	
}

E agora?! blink.gif

Valeu! tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Olá!

Valeu mesmo, caras! smile.gif

Mas agora, com o PreparedStatement, a mensagem de erro da exceção é "Driver does not support this function".

O comando SQL é:

String CommandSQL = "UPDATE mymusic SET artista = ? WHERE musica = ?";
E as linhas de acesso:
try {

   Connection c = acss.AcessarDB();
  
   PreparedStatement s = c.prepareStatement( CommandSQL );
      
   s.setString( 1, art );
   s.setString( 2, mus );
  
   s.executeUpdate( CommandSQL );
      
} catch( SQLException e ) {
  	
   JOptionPane.showMessageDialog( null, "Erro na execução: " + e.getMessage() );
  	
} finally {
  	
   acss.fecharCon();
  	
}

E agora?! blink.gif

Valeu! tongue.gif

QUal o anco de dados que você ta usando??? qual o Drive??? Valeuz

Link para o comentário
Compartilhar em outros sites

  • 0

Aí, o código do método "AcessarDB()", que retorna a conexão, é o seguinte:

public Connection AcessarDB() {
   try {

      Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
  
      con = DriverManager.getConnection( "jdbc:odbc:Musicas", "", "" );

   } catch( Exception e ) {

         JOptionPane.showMessageDialog( null, "Erro: " + e.getMessage() );

   }
  
   return con;
}

A variável "Con" é definida com private e inicializada com "null" na declaração. O que você quis dizer com usar Allias?

Valeu! tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Cara o allias faz o coputador reconhecer o Caminho da conexão para fguncionar o BD...

Cara coloque em comentário suas conexão e tente essa aqui!!!

private Connection con= null;
private String url;	



public Connection getConect(){

	try{
	String Hd=System.getProperty("user.dir");
	Hd+="\\diretório\\principal.mdb";	
	System.out.println("->"+Hd);
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	url="jdbc:odbc:Principal";
	con= DriverManager.getConnection("jdbc:odbc:Driver=" + 
       "{Microsoft Access Driver (*.mdb)};" + 
       "DBQ=" + Hd ,"",""); 
	}
	catch(ClassNotFoundException ex2){
	JOptionPane.showMessageDialog(null,""+ex2.getMessage());	
	}
	catch(SQLException ex){
	JOptionPane.showMessageDialog(null,""+ex.getMessage());
	}
	return con;
	}




obs:coloque o nome do diretório onde estpá no seu computador o banco de dados , depois o nome do banco , acima eu coloquei \\diretorio\\principal.mdb

Teste essa conexão direta dessa forma ele retorna op con, etão basta usaloi para sua aplicação BEleza!!! !Qualquer coisa fale ae!!!

há CARA , se você quiser o exemplo completo da agenda que eu fiz , pode ser util parta você entender melhor como funciona isso, tem também apostilas e ebooks la no site

http://www.codbrasil.com/fss/index.jsp

Vakleu ve la

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...