Duvidas AgendaJava

23 respostas
jessica_nito

Bom dia ... estou com alguns probleminhas ....

eu criei uma agenda ..... e não cosigo alterar e nem excluir .. alguem pode MOSTRAR onde está o erro?

obrigada

import java.sql.*;


	public class AgendaDB {
		private String nome ;
		private String endereco;
		private String cidade ;
		private String telefone ;
		private String result_busca ;
		private String result_inserir ;
		private String result_alterar ;
		private String result_excluir ;
		public static final String BUSCA_INVALIDA = "failure";
		public static final String BUSCA_VALIDA = "success";
		public static final String SUCESSO_INSERCAO = "success";
		public static final String FALHA_INSERCAO = "failure";
		public static final String SUCESSO_ALTERACAO = "success";
		public static final String FALHA_ALTERACAO = "failure";
		public static final String SUCESSO_EXCLUSAO = "success";
		public static final String FALHA_EXCLUSAO = "failure";
		
		static Connection con = null;
		static Statement stm = null;
		static ResultSet rs;
		
		
		public AgendaDB() {
			if (con==null) {
				try {
					Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
					con =
						DriverManager.getConnection("jdbc:microsoft:sqlserver://10.1.7.4:1433;DataBaseName=TESTE_JESSICA;","sa","sa123456");
				} catch (SQLException e) {
					System.err.println ("Erro: "+e);
					e.printStackTrace();
					con = null;
				} catch (ClassNotFoundException e) {
					System.out.println("ClassNotFound...");

					e.printStackTrace();
				}
			}
		}
		
		public String getNome() {
			return nome;
		}
		public void setNome(String nome) {
			this.nome = nome;
		}
		public String getCidade() {
			return cidade;
		}
		public void setCidade(String cidade) {
			this.cidade = cidade;
		}
		public String getEndereco() {
			return endereco;
		}
		public void setEndereco(String endereco) {
			this.endereco = endereco;
		}
		public String getTelefone() {
			return telefone;
		}
		public void setTelefone(String telefone) {
			this.telefone = telefone;
		}
		
		public String inserir() 
		{
			String result_inserir = FALHA_INSERCAO;
			try {
				stm = con.createStatement();
				stm.execute("INSERT INTO Pessoa(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
						endereco + "','" + cidade + "','"+ telefone + "')");
				stm.close();
				result_inserir = SUCESSO_INSERCAO;
			} catch (SQLException e) {
				System.err.println ("Erro: "+e);
				result_inserir = FALHA_INSERCAO;
			}
			return result_inserir;
		}
		
		public String buscar() {
			String result_busca = BUSCA_INVALIDA;
			try {
				stm = con.createStatement();
				rs = stm.executeQuery("SELECT * FROM pessoa WHERE nome = '" + nome + "'");
				if (rs.next()) {
					nome = rs.getString("nome");
					telefone = rs.getString("telefone");
					endereco = rs.getString("endereco");
					cidade = rs.getString("cidade");
					result_busca = BUSCA_VALIDA;
				}
				else
					result_busca = BUSCA_INVALIDA;
				rs.close();
				stm.close();
			} catch (SQLException e) {
				System.err.println ("Erro: "+e);
			}
			return result_busca;
		}
		
		public String Alterar() {
			String result_alterar = FALHA_ALTERACAO;
			try {
				stm = con.createStatement();
				rs = stm.executeQuery("UPDATE pessoa SET nome = '" + nome + "'");
				if (rs.next()) {
					telefone = rs.getString("telefone");
					endereco = rs.getString("endereço");
					cidade = rs.getString("cidade");
					result_alterar = SUCESSO_ALTERACAO;
				}
				else
					result_alterar = FALHA_ALTERACAO;
				rs.close();
				stm.close();
			} catch (SQLException e) {
				System.err.println ("Erro: "+e);
			}
			return result_alterar;
		}
		public String Excluir() {
			String result_excluir = FALHA_EXCLUSAO;
			try {
				stm = con.createStatement();
				rs = stm.executeQuery("DELETE * FROM pessoa WHERE nome = '" + nome + "'");
				if (rs.next()) {
					telefone = rs.getString("telefone");
					endereco = rs.getString("endereço");
					cidade = rs.getString("cidade");
					result_excluir = SUCESSO_EXCLUSAO;
				}
				else
					result_excluir = FALHA_EXCLUSAO;
				rs.close();
				stm.close();
			} catch (SQLException e) {
				System.err.println ("Erro: "+e);
			}
			return result_excluir;
		}
		
		
		public static void main (String args[]){
			//instanciar classe principal, onde a conexao é inicializada
			AgendaDB agenda = new AgendaDB();
			
			//atribuir valores às variáveis
			agenda.nome = "Jessica";
			agenda.endereco = "End. 1234";
			agenda.cidade = "OSASCO - AFFF";
			agenda.telefone = "23456778";
			
			//inserir valores no BD
			agenda.inserir();
			
			//remover os valores das variaveis
			agenda.endereco = null;
			agenda.cidade = null;
			agenda.telefone = null;
			
			//buscar os valores do BD
			agenda.buscar();
			
			//imprimir valores na tela
			System.out.println(agenda.nome);
			System.out.println(agenda.endereco);
			System.out.println(agenda.cidade);
			System.out.println(agenda.telefone);
			
			//alterar os valores
			agenda.Alterar();
			
			agenda.nome = "";
			agenda.endereco = "End.14646461";
			agenda.cidade = "OSASCO - kkkkkk";
			agenda.telefone = "36363636";
			
			//excluir os valores
			agenda.Excluir();
			
			agenda.endereco = null;
			agenda.cidade = null;
			agenda.telefone = null;
			
			
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
			
			
		
			

}

23 Respostas

drigo.angelo

Oi

Utilize o PreparedStatement
Para fazer suas consultas :smiley:

Posta o código do erro aí se estiver dando algum

Para testar melhor, depois de chamar o método alterar, no seu main, chame novamente o método buscar e imprima na tela
os valores dos atributos ( igual voce fez depois que inseriu )

jessica_nito

então o erro é este …
Erro: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Incorrect syntax near ‘*’.
Erro: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.

eu não cosnigo consigo alterar e nem excluir as variaveis eu acho que o meu código no metodo está errado …e tbm acho que o metodo alterar no banco de dados está errado …

M

Olá jessica!

Como está sua tabela no banco? Qual é a chave primária?

jessica_nito

eu coloquei o nome …como chave primaria

renamed

Veja isso:

DELETE * FROM pessoa WHERE

A sintaxe correta do comando é DELETE FROM (NOME_TABLE), não tem “*” como no Select.
Exatamente o que o erro diz:

Erro: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Incorrect syntax near ‘*’.

jessica_nito

e o update acho que está errado tbm … alguem pode me dizer qual é a sintaxe correta?

pq eu não consigo atualizar no banco de dados … os valores

jessica_nito

???

jessica_nito

eu ficaria grata se alguem respondesse =)

adriano_si

Jéssica… você já pensou em procurar no Google ???

Uma pesquisa por “sintaxe UPDATE SQL” no oráculo você teria sua resposta…

Dá pra perceber em alguns POSTs seus esses traços de algo que você está precisando trabalhar.

Tenho a imprensão que já lhe passei esse link, mas peço novamente, leia-o por favor, para o seu bem.

http://www.istf.com.br/perguntas

Abs [] e bons estudos.

jessica_nito

obrigado … ja tentei procurar no google ja mudei os códigos e continua com erro mas obrigado pela anteção

adriano_si

Pois então coloque aqui onde você procurou e o código que você mexeu, porque senão fica difícil poder lhe ajudar a achar o caminho sozinha…

Só não dá pra fazer por você… Post aí o seu novo código do UPDATE.

Mais uma vez eu lhe peço, leia o link que lhe passei, será útil nessa jornada.

Abs []

jessica_nito

relaxa não estou pedindo pra ninguem fazer por mim … se eu tivesse pedido para alguem criar uma agenda que ligue o banco de dados ai sim seria muito como agora eu fiz tudo só que está dando erro eu só pedi que mostrassem onde está e como seria o código correto como muita gente ja fez …

public String Alterar() { String result_Alterar = FALHA_ALTERACAO; try { stm = con.createStatement(); rs = stm.executeQuery("update pessoa " + "set endereco = " + endereco + ", " + "cidade = " + cidade + "," + "telefone = " + telefone + " " + "where nome = \"" + nome + "\" "); if (rs.next()) { nome = rs.getString("nome"); endereco = rs.getString("endereço"); cidade = rs.getString("cidade"); telefone = rs.getString("telefone"); result_Alterar = SUCESSO_ALTERACAO; } else result_Alterar = FALHA_ALTERACAO; rs.close(); stm.close(); } catch (SQLException e) { System.err.println ("Erro: "+e); } return result_Alterar; }

eu coloquei esse código agora só que está dando esse erro…
Erro: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Incorrect syntax near the keyword ‘End’.

drigo.angelo

Oi!

Ta utilizando alguma IDE? Qual? (sim, por mais que seja estranho, isso pode ser útil para te ajudar)

Tenta “pegar” a string que seu programa está mandando para o bd e tente roda-la diretamente no banco.

Novamente te aconselho a utilizar o PreparedStatement, daqui a pouco posto um código de exemplo.

O erro aqui é que você não colocou Aspas na consulta envolvendo o endereço, como você fez no nome. Isso deve ser feito com cada campo seu que for do tipo String :smiley:

adriano_si

Veja bem, não digo fazer por você o trabalho todo, mas uma boa pesquisa também é realizar o trabalho dos outros, fazendo uma pesquisa, reví (faz tempo que não trabalho com JDBC puro) que você está executando seu Update de forma errada com o método errado e ainda nem há a necessidade de retornar nada para nenhum ResultSet.

http://www.jdbc-tutorial.com/jdbc-update-table.htm

Abs [] e bons estudos.

jessica_nito

ahh tá endetediii obrigado … sim sim coloca o exemplo … é que eu estou aprendendo java na marra sabe … estou lendo um livro java como programar e meu chefe que mandou fazer um agenda …

mas muito obrigadi viu :smiley:

drigo.angelo

Veja como fazer utilizando PreparedStatement, como eu havia dito.

Além de ser mais seguro e “correto” é muito mais limpo e legível…

PreparedStatement ps = con.prepareStatement("UPDATE pessoa SET endereco = ? ," + " cidade = ? ," + " telefone = ?" + " WHERE nome = ?"); ps.setString(1, "Novo Endereco"); ps.setString(2, "Nova cidade"); ps.setString(3, "Novo Telefone"); ps.setString(4, "Nome da pessoa"); int resultado = ps.executeUpdate();

jessica_nito

eu agradeceria se você mandasse o exemplo =) ( drigo.andelo)

obrigada viu!!!

drigo.angelo

Então o exemplo é esse aí de cima xD

Tipo assim: métodos de DML ( insert/update/delete ) não retornam nada (alias, retornam o número de linhas que foram alteradas) então quando você vai execurar essas operações deve usar um método adequado. ( no caso, executeUpdate() )

Leia também a documentaçao do PreparedStatement e da classe Statement
(Só pesquisar no google “nomeDaClasse java 6” que é quase sempre o 1° resultado) Se vc não souber inglês, o google tradutor é muito bom ( mas cuidado pq ele pode traduzir o nome dos métodos tbm :smiley: )

Estude também os comandos SQL e ODBC…

Explicando aquele exemplo… os pontos de interrogação são substituídos pelos métodos setTipo(int, Object) na ordem que aparecem, tipo assim, o 1° “?” será substituído pelo setTipo(1, Objeto), e tem esse método para quase todos os tipos, setInt, setString, setDate etc…

Espero ter ajudado
[]'s

R

só uma dica… nunca usa o nome como chave primária pois podem existir pessoas com nomes iguais… usem um código único de preferência…

drigo.angelo

Para uma agenda (principalmente telefônica) é válido colocar o nome como chave, visto que cada entrada são os detalhes de um contato e só aparece o nome na listagem, logo o usuário deve colocar um nome único para poder identificar o contato (vixx me enrolei, mas espero ter conseguido me expressar)

Pelo menos foi isso que entendi da analise da Jessica xD

R

drigo.angelo:
Para uma agenda (principalmente telefônica) é válido colocar o nome como chave, visto que cada entrada são os detalhes de um contato e só aparece o nome na listagem, logo o usuário deve colocar um nome único para poder identificar o contato (vixx me enrolei, mas espero ter conseguido me expressar)

Pelo menos foi isso que entendi da analise da Jessica xD

Imagina vc procurando o nome pra ver se ele ja existe toda vez que inserir um cadastro. Inclusive se deparando com diferenças sutis no nome como acentos e maiúsculas. Ou se o nome da pessoa é um nome comum, teria que ser alterado pra ser incluido na agenda.

Por isso, mesmo sendo uma agenda, é indicado um código como chave primária usando o nome como índice pra evitar qualquer problema…

L

idem

faça um campo como se fosse um codigo , seria bem melhor e teria um controle melhor e nele vc coloca como chave primária...

contendo que o não cadestre codigo igual mas tendo nomes iguais e etc.

na maioria dos meu projetos eu busco por numeros, já por nomes quando for um jtable .

ex. meu
public boolean alterar(SeguradoTO to){

		boolean sucesso = true;
		try { 
			con = DAOConexao.getConn(); 
			String sql = " Update  tb_Cadastro set NomeSegurado=?, Nascimento=?, Sexo=?, CPF=?, Ende=?, Bairro=?, NumeroRes=?, Complemento=?, Produto=?, Premio=? ,CEP=?,UF=? ,NomeEmpresa=?, EndrecoEmpresa=? ,BairroEmpresa=?,CidadeEmpresa=?,CNPJ=? ,Banco=?, Agencia=? ,AgenciaDV=?,Conta=?,ContaDV=?,TipoDeConta=? , DataDoCadastro=? where codigo = ?";
			pstm = con.prepareStatement(sql);

			//set todos os campos
			pstm.setString(1,to.getNomeSegurado());
			pstm.setString(2,to.getNascimento());
			pstm.setString(3,to.getSexo());
			pstm.setString(4,to.getCpf());
			pstm.setString(5,to.getEnde());
			pstm.setString(6,to.getBairro());
			pstm.setString(7,to.getNumeroRes());
			pstm.setString(8,to.getComplemento());
			pstm.setString(9,to.getProduto());
			pstm.setString(10,to.getPremio());
			pstm.setString(11,to.getCEP()); 
			pstm.setString(12,to.getUF());
			pstm.setString(13,to.getNomeEmpresa()); 
			pstm.setString(14,to.getEndrecoEmpresa()); 
			pstm.setString(15,to.getBairroEmpresa()); 
			pstm.setString(16,to.getCidadeEmpresa()); 
			pstm.setString(17,to.getCnpj()); 
			pstm.setString(18,to.getBanco()); 
			pstm.setString(19,to.getAgencia()); 
			pstm.setString(20,to.getAgenciaDV());  
			pstm.setString(21,to.getConta()); 
			pstm.setString(22,to.getContaDV());
			pstm.setString(23,to.getTipoDeConta()); 
			pstm.setString(24,to.getDataDoCadastro()); 
			pstm.setString(25,to.getCodigo()); 
			pstm.executeUpdate();
		}catch(Exception e){
			System.out.println(e.toString());
			sucesso = false;
		}finally{
			try{
				//pstm.close(); 
				//con.close();
			}catch(Exception e){
			}
		}
		return sucesso;
	}
}
jessica_nito

Obrigada pessoa !!! Ja consegui resolver o problema =) …agora vou ter que fazer em JSP… alguem pode me passar um exmplo?

beijos … de novo muito obrigada! =)

Criado 14 de março de 2011
Ultima resposta 16 de mar. de 2011
Respostas 23
Participantes 7