Erro ao testar a classe Usuario
Colegas tenho os seguintes códigos:
Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Alguem poderia me dar uma ajuda por favor?
Codigo da classe GenericDAO (classe de Conexão) public ResultSet ExecuteQuery(String query,Object...params) throws SQLException{ PreparedStatement ps = getStatement(query); for (int i = 0; i < params.length; i++) { ps.setObject(i+1, params[i]); } return ps.executeQuery(); }
Codigo da classe UsuaarioDAO public int adicionarUsuario(Usuario usr) throws SQLException{ String sql = "insert into usuario(nome,login,senha) values(?,?,?)"; ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha()); return usr.getId(); }
// Código da classe que do JUnit, para fazer teste public int adicionarUsuario(Usuario usr) throws SQLException{ String sql = "insert into usuario(nome,login,senha) values(?,?,?)"; ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha()); return usr.getId(); }
Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Alguem poderia me dar uma ajuda por favor?
Nilo Souza
Curtidas 0
Respostas
Nilo Souza
23/04/2011
Colegas tenho os seguintes códigos:
Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Alguem poderia me dar uma ajuda por favor?
Codigo da classe GenericDAO (classe de Conexão) public ResultSet ExecuteQuery(String query,Object...params) throws SQLException{ PreparedStatement ps = getStatement(query); for (int i = 0; i < params.length; i++) { ps.setObject(i+1, params[i]); } return ps.executeQuery(); }
Codigo da classe UsuaarioDAO public int adicionarUsuario(Usuario usr) throws SQLException{ String sql = "insert into usuario(nome,login,senha) values(?,?,?)"; ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha()); return usr.getId(); }
// Código da classe que do JUnit, para fazer teste @Test public void testAdicionarUsuario() throws SQLException { System.out.println("adicionarUsuario"); Usuario usr = new Usuario(); usr.setNome("Nilo"); usr.setLogin("nsouza"); usr.setSenha("123"); UsuarioDAO instance = new UsuarioDAO(); idOfUser = instance.adicionarUsuario(usr); Usuario result = instance.getUser(idOfUser); assertEquals(idOfUser, result.getId()); }
Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Alguem poderia me dar uma ajuda por favor?
GOSTEI 0
Davi Costa
23/04/2011
Vc está adicionando um item e não realizando uma consulta, por isso não retorna ResultSet. Se vc troca seu insert por um select perceberá que não dará mais esse erro.
Em nenhum momento nesse trecho de código:
public int adicionarUsuario(Usuario usr) throws SQLException{
String sql = "insert into usuario(nome,login,senha) values(?,?,?)";
ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());
return usr.getId();
}
@Test
public void testAdicionarUsuario() throws SQLException {
System.out.println("adicionarUsuario");
Usuario usr = new Usuario();
usr.setNome("Nilo");
usr.setLogin("nsouza");
usr.setSenha("123");
UsuarioDAO instance = new UsuarioDAO();
idOfUser = instance.adicionarUsuario(usr);
Usuario result = instance.getUser(idOfUser);
assertEquals(idOfUser, result.getId());
}
Vc adicionou um id para o Usuario usr, não é JPA que através do mapeamento vai pegar o id do seu banco.
Mas p PreparedStatement tem um método que talvez possa te ajudar.
ps.executeUpdate(sql, autoGeneratedKeys);
Espero ter ajudado, só para finalizar para vc dar um insert use somente execute(), ele retorna um boolean, que talvez vc possa usar no seu teste é bom ver a documentação para ver em que situação ele te retorna true ou false.
Att Davi
Em nenhum momento nesse trecho de código:
public int adicionarUsuario(Usuario usr) throws SQLException{
String sql = "insert into usuario(nome,login,senha) values(?,?,?)";
ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());
return usr.getId();
}
@Test
public void testAdicionarUsuario() throws SQLException {
System.out.println("adicionarUsuario");
Usuario usr = new Usuario();
usr.setNome("Nilo");
usr.setLogin("nsouza");
usr.setSenha("123");
UsuarioDAO instance = new UsuarioDAO();
idOfUser = instance.adicionarUsuario(usr);
Usuario result = instance.getUser(idOfUser);
assertEquals(idOfUser, result.getId());
}
Vc adicionou um id para o Usuario usr, não é JPA que através do mapeamento vai pegar o id do seu banco.
Mas p PreparedStatement tem um método que talvez possa te ajudar.
ps.executeUpdate(sql, autoGeneratedKeys);
Espero ter ajudado, só para finalizar para vc dar um insert use somente execute(), ele retorna um boolean, que talvez vc possa usar no seu teste é bom ver a documentação para ver em que situação ele te retorna true ou false.
Att Davi
GOSTEI 0
Davi Costa
23/04/2011
E ai deu certo? Algum feedBack?
Caso tenha resolvido favor fechar pendência.
Att Davi
Caso tenha resolvido favor fechar pendência.
Att Davi
GOSTEI 0
Dyego Carmo
23/04/2011
Resolvido ?
Se sim , por favor feche o chamado :)
Se sim , por favor feche o chamado :)
GOSTEI 0
Nilo Souza
23/04/2011
Não resolvi, assim que voltar respondo.
volto amanha.
volto amanha.
GOSTEI 0
Nilo Souza
23/04/2011
Ola, já estou em casa. Na verdade não resolveu. Abaixo toda a minha classe de teste para ajudar na compreensão do que fiz. Obrigado desde já pela ajuda!
package treinamento.DAO; import com.sun.xml.internal.ws.wsdl.writer.UsingAddressing; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import treinamento.entidade.Usuario; /** * * @author nsouza */ public class UsuarioDAOTest { public static Integer idOfUser = 0; public UsuarioDAOTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testGetUser() throws Exception { System.out.println("getUser"); int IdUser = idOfUser; UsuarioDAO instance = new UsuarioDAO(); Integer expResult = idOfUser; Usuario result = instance.getUser(IdUser); assertEquals(expResult, result.getId()); } @Test public void testAdicionarUsuario() throws SQLException { System.out.println("adicionarUsuario"); Usuario usr = new Usuario(); usr.setNome("Nilo"); usr.setLogin("nsouza"); usr.setSenha("123"); UsuarioDAO instance = new UsuarioDAO(); idOfUser = instance.adicionarUsuario(usr); Usuario result = instance.getUser(idOfUser); assertEquals(idOfUser, result.getId()); } //@Test public void testValidarUsuarioSenha() { System.out.println("validarUsuarioSenha"); String usuario = ""; String senha = ""; UsuarioDAO instance = new UsuarioDAO(); boolean expResult = false; boolean result = instance.validarUsuarioSenha(usuario, senha); assertEquals(expResult, result); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } //@Test public void testRemoveUsuario() { System.out.println("removeUsuario"); int idUser = 0; UsuarioDAO instance = new UsuarioDAO(); instance.removeUsuario(idUser); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } /* * @Test public void testGetUser() throws Exception { System.out.println("getUser"); int idUser = idOfUser; UserDAO instance = new UserDAO(); Integer expResult = idOfUser; User result = instance.getUser(idUser); assertEquals(expResult, result.getId()); } */ // @Test public void testAtualizaUsuario() { System.out.println("atualizaUsuario"); Usuario User = null; UsuarioDAO instance = new UsuarioDAO(); instance.atualizaUsuario(User); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } /** * Test of getAllUsers method, of class UsuarioDAO. */ // @Test public void testGetAllUsers() throws Exception { System.out.println("getAllUsers"); UsuarioDAO instance = new UsuarioDAO(); List expResult = null; List result = instance.getAllUsers(); assertEquals(expResult, result); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } /** * Test of populateUserInfo method, of class UsuarioDAO. */ // @Test public void testPopulateUserInfo() throws Exception { System.out.println("populateUserInfo"); ResultSet rs = null; Usuario expResult = null; Usuario result = UsuarioDAO.populateUserInfo(rs); assertEquals(expResult, result); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } }
GOSTEI 0