Erro com select, insert, updade e delete

5 respostas
emso.exe

Pessoal estou com um problema no select, insert, updade e delete desse código... ele executa as instruções no registro quando quero, porém sempre mostra essa mensagem NO RESULTSET WAS PRODUCED e quando deleto um registro ele só deixa de exibir/localizar ele quando fecho e abro a aplicação. Não entendo o que pode ser... Alguém poderia me dizer o que estou errando? Valew!

import java.sql.*;

public class LivroDAL {

private static boolean erro;
private static String mens;
private static Connection con;

public static void conecta(String _alias, String _usuario, String _senha)
{
	try {
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		con = DriverManager.getConnection("jdbc:odbc:" + _alias,_usuario,_senha);
	}
	catch(Exception e){
		System.out.println("Erro: " + e.getMessage());
	}
}

public static void desconecta()
{
	try{
	con.close();
	}
	catch(Exception e){
		System.out.println("Erro: " + e.getMessage());
	}
}

public static void inseriUmLivro(Livro umlivro)
{
	try {
		conecta("UmAlias","","");
		PreparedStatement st = con.prepareStatement("INSERT INTO TabLivros (titulo,autor,editora,anoedicao,localizacao) Values (?,?,?,?,?)");
		st.setString(1,umlivro.getTitulo());
		st.setString(2,umlivro.getAutor());
		st.setString(3,umlivro.getEditora());
		st.setInt(4,Integer.parseInt(umlivro.getAnoEdicao()));
		st.setString(5,umlivro.getLocalizacao());
		st.executeUpdate();
		desconecta();
		}
		catch(Exception e){
			setErro(e.getMessage());
		}
	}

public static void consultaUmLivro(Livro umlivro)
	{
	try {
		conecta("UmAlias","","");
		ResultSet rs;
		Statement st = con.createStatement();
		rs = st.executeQuery("SELECT * FROM TabLivros WHERE titulo='"+ umlivro.getTitulo() +"'");
		while (rs.next())
		{
			  umlivro.setAutor(rs.getString("autor"));
			  umlivro.setEditora(rs.getString("editora"));
			  umlivro.setAnoEdicao(rs.getString("anoedicao"));
			  umlivro.setLocalizacao(rs.getString("localizacao"));
		}

		desconecta();
		}
		catch(Exception e){
			setErro(e.getMessage());
		}
	}

public static void alteraUmLivro(Livro umlivro)
	{
	try {
		conecta("UmAlias","","");
		ResultSet rs;
		Statement st = con.createStatement();
		rs = st.executeQuery("UPDATE TabLivros SET autor='"+ umlivro.getAutor() +"', editora='"+ umlivro.getEditora() +"', anoedicao='"+ umlivro.getAnoEdicao() +"', localizacao='"+ umlivro.getLocalizacao() +"' WHERE titulo='"+ umlivro.getTitulo() +"'");
		while (rs.next())
		{
			  umlivro.setTitulo(rs.getString("titulo"));
			  umlivro.setAutor(rs.getString("autor"));
			  umlivro.setEditora(rs.getString("editora"));
			  umlivro.setAnoEdicao(rs.getString("anoedicao"));
			  umlivro.setLocalizacao(rs.getString("localizacao"));
		}
		desconecta();
		}
		catch(Exception e){
			setErro(e.getMessage());
		}
	}

public static void deletaUmLivro(Livro umlivro)
	{
	try {
		conecta("UmAlias","","");
		ResultSet rs;
		Statement st = con.createStatement();
		rs = st.executeQuery("DELETE FROM TabLivros WHERE titulo='"+ umlivro.getTitulo() +"'");
		while (rs.next())
		{
			  umlivro.setTitulo(rs.getString("titulo"));
			  umlivro.setAutor(rs.getString("autor"));
			  umlivro.setEditora(rs.getString("editora"));
			  umlivro.setAnoEdicao(rs.getString("anoedicao"));
			  umlivro.setLocalizacao(rs.getString("localizacao"));
		}
		desconecta();
		}
		catch(Exception e){
			setErro(e.getMessage());
		}
	}

public static void setErro(boolean _erro)
	{
	erro=_erro;
	}

public static void setErro(String _mens)
	{
	erro=true;
	mens=_mens;
	}

public static boolean getErro() {return erro;}
public static String getMens() {return mens;}
}

5 Respostas

Vingdel

Os métodos getTitulo() e similares estão retornando os valores desejados? Já testou eles?

Abraço!

otaviojava

os métodos de inserir e atualizar realmente não produzirão resulset,
Que banco de dados você está usando ?
Outra coisa verifica se o seu usuário tem permissão de fazer as operações do CRUD

malokas

Só uma observação, o correto segundo os padrões seria DAO e não DAL

public class LivroDAO
discorpio

Bom dia a todos.

Apesar do nome da classe estar como livrosDAL e não como livrosDAO, que não deixa de ser um erro de padronização, não tem a menor influência na conexão com o banco.

O erro pode estar aqui:

public static void conecta(String _alias, String _usuario, String _senha) {  
    try {  
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
        con = DriverManager.getConnection("jdbc:odbc:" + _alias,_usuario,_senha);  
    }  
    catch(Exception e){  
        System.out.println("Erro: " + e.getMessage());  
    }  
  }  

  .......
  .......
  // Onde estão o usuário e sua senha
  conecta("UmAlias","","");

Voce precisa autenticar um usuário com sua senha, para se conectar no banco, se não haverá a mensagem de erro dizendo que nenhum ResultSet foi produzido (NO RESULTSET WAS PRODUCED).

[/code]

ViniGodoy

Movido para o fórum de persistência. Por favor, leia com atenção a descrição dos fóruns antes de postar.

Criado 28 de maio de 2011
Ultima resposta 29 de mai. de 2011
Respostas 5
Participantes 6