Estou começando a estudar Struts 2 eu estou fazendo um teste e um crud simples eu queria saber onde estar o meu erro, vou postar o erro e as classes. Eu preciso muita dessa dica desde já muito obrigado.
publicclassFuncionariosDAO{privateConnectionconnection;publicFuncionariosDAO(Connectioncon){this.connection=con;}publicFuncionariosDAO()throwsSQLException{this.connection=ConnectionFactory.getConnection();}publicvoidadciona(Funcionariosfuncionarios)throwsSQLException{Stringsql="INSERT INTO FUNCIONARIOS (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "+"VALUES(?,?,?,?)";PreparedStatementstatement=connection.prepareStatement(sql);statement.setString(1,funcionarios.getFUNCIONARIOS_NOME());statement.setString(2,funcionarios.getFUNCIONARIOS_SENHA());statement.setString(3,funcionarios.getFUNCIONARIOS_SOBRENOME());statement.execute();statement.close();}publicList<Funcionarios>getList()throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS");ResultSetrs=statement.executeQuery();List<Funcionarios>funcionarios=newArrayList<Funcionarios>();while(rs.next()){Funcionariosfuncionario=newFuncionarios();funcionario.setFUNCIONARIOS_CAD(rs.getLong("FUNCIONARIOS_CAD"));funcionario.setFUNCIONARIOS_NOME(rs.getString("FUNCIONARIOS_NOME"));funcionario.setFUNCIONARIOS_SENHA(rs.getString("FUNCIOnARIOS_SENHA"));funcionario.setFUNCIONARIOS_SOBRENOME(rs.getString("FUNCIONARIOS_SOBRENOME"));funcionarios.add(funcionario);}rs.close();statement.close();returnfuncionarios;}publicvoidaltera(Funcionariosfuncionarios)throwsSQLException{PreparedStatementstatement=connection.prepareStatement("UPDATE"+"FUNCIONARIOS SET FUNCIONARIOS_NOME=?,"+"FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");statement.setString(1,funcionarios.getFUNCIONARIOS_NOME());statement.setString(2,funcionarios.getFUNCIONARIOS_SENHA());statement.setString(3,funcionarios.getFUNCIONARIOS_SOBRENOME());statement.execute();statement.close();}publicFuncionariosprocura(Longid)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");Funcionariosfuncionarios=newFuncionarios();statement.setLong(1,id);ResultSetrs=statement.executeQuery();while(rs.next()){funcionarios.setFUNCIONARIOS_CAD(rs.getLong("FUNCIONARIOS_CAD"));funcionarios.setFUNCIONARIOS_NOME(rs.getString("FUNCIONARIOS_NOME"));funcionarios.setFUNCIONARIOS_SOBRENOME(rs.getString("FUNCIONARIOS_SOBRENOME"));funcionarios.setFUNCIONARIOS_SENHA(rs.getString("FUNCIONARIOS_SENHA"));}returnfuncionarios;}publicvoidremove(Funcionariosfuncionarios)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");statement.setLong(1,funcionarios.getFUNCIONARIOS_CAD());statement.execute();statement.close();}}
packagebr.com.FuncionariosDAO;importjava.sql.SQLException;importjavax.servlet.ServletContext;importorg.apache.struts2.ServletActionContext;publicclassDAOFactory{privateStringdatabaseType;privatestaticDAOFactoryinstance;static{instance=newDAOFactory();}privateDAOFactory(){ServletContextservletContext=ServletActionContext.getServletContext();databaseType=servletContext.getInitParameter("dbType");}publicstaticDAOFactorygetInstance(){returninstance;}publicFuncionarioIngetfuncionarioIn()throwsSQLException{if("mysql".equalsIgnoreCase(databaseType)){return(FuncionarioIn)newFuncionariosDAO();}elseif("oracle".equalsIgnoreCase(databaseType)){// return new EmployeeDAOOracleImpl();}elseif("mssql".equalsIgnoreCase(databaseType)){// return new EmployeeDAOMsSQLImpl();}returnnull;}}
Rode o sistema em modo degug e verifique se o objeto de connection do seu DAO está vindo null (é o que pareçe).
Antes de rodar tudo via Struts2, tente rodar o DAO com uma classe simples com um main (ou use o JUnit). Assim seus testes serão mais rápidos.
Mas, na boa, se você não tiver fortes motivo para usar JDBC puro no projeto porque não usar Hibernate?
Há um plugin para Struts2, o Full Hibernate Plugin, que reduz imensamente o trabalho de uso do Hibernate com Struts2, inclusive oferendo o uso transparente do Hibernate Validator. http://cwiki.apache.org/S2PLUGINS/full-hibernate-plugin.html
Espero ter ajudado. Um forte abraço.
dcorteztec
vlw Yoshiriro mas rodei em modo debug eo objeto connections não esta nulo ele esta trazendo a conexão certinha o que esta nulo
esta o funcionarios na parte de adiciona o valor mas não achei o motivo, se vcs poderem me ajudar agradeço.
Amigo, ocorreuq eu no Struts2 seus gets e sets devem bater 100% com o nome do objeto. Inclusive o nome do parâmetro nos sets deve ser igual.
Se seu objeto é
seus gets e sets devem ser:
e
Se for fazer o Debug na Action vais ver que seu objeto funcionario chega null no método create da Action.
E outra: há uma máprática TERRIVEL no seu código: você abriu “try-catch” sem por nada dentro dos catch. Se não queria tratar, por que simplesmente não usou a palavra throws na assinatura do método? Do jeito que está, podem ocorrer erros que você nunca vai identificar!
E outra: é padrão usar nomes de POJOs de entidade no SINGULAR. Ou seja, seria melhor sua classe se chamar Funcionario e não Funcionarios, ok?
dcorteztec
Obrigado pelas dicas aprendi bastante principalmente do try, eu alterei as classes.
mas continua dando problema muito obrigado pela ajuda
packagebr.com.FuncionariosDAO;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importbr.com.Funcionarios.Funcionarios;importbr.com.Funcionarios.Connecty.*;publicclassFuncionariosDAO{privateConnectionconnection;publicFuncionariosDAO(Connectioncon){this.connection=con;}publicFuncionariosDAO()throwsSQLException{this.connection=ConnectionFactory.getConnection();}publicvoidadciona(Funcionariosfuncionario)throwsSQLException{Stringsql="INSERT INTO funcionarios (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "+"VALUES(?,?,?)";PreparedStatementstatement=connection.prepareStatement(sql);statement.setString(1,funcionario.getFuncionario_nome());statement.setString(2,funcionario.getFuncionario_senha());statement.setString(3,funcionario.getFuncionario_sobrenome());statement.execute();statement.close();}publicList<Funcionarios>getList()throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS");ResultSetrs=statement.executeQuery();List<Funcionarios>funcionarios=newArrayList<Funcionarios>();while(rs.next()){Funcionariosfuncionario=newFuncionarios();funcionario.setFuncionario_cad(rs.getLong("funcionario_cad"));funcionario.setFuncionario_nome(rs.getString("funcionario_nome"));funcionario.setFuncionario_senha(rs.getString("funcionario_senha"));funcionario.setFuncionario_sobrenome(rs.getString("funcionario_sobrenome"));funcionarios.add(funcionario);}rs.close();statement.close();returnfuncionarios;}publicvoidaltera(Funcionariosfuncionario)throwsSQLException{PreparedStatementstatement=connection.prepareStatement("UPDATE"+"FUNCIONARIOS SET FUNCIONARIOS_NOME=?,"+"FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");statement.setString(1,funcionario.getFuncionario_nome());statement.setString(2,funcionario.getFuncionario_senha());statement.setString(3,funcionario.getFuncionario_sobrenome());statement.execute();statement.close();}publicFuncionariosprocura(longid)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");Funcionariosfuncionarios=newFuncionarios();statement.setLong(1,id);ResultSetrs=statement.executeQuery();while(rs.next()){funcionarios.setFuncionario_cad(rs.getLong("FUNCIONARIOS_CAD"));funcionarios.setFuncionario_nome(rs.getString("FUNCIONARIOS_NOME"));funcionarios.setFuncionario_sobrenome(rs.getString("FUNCIONARIOS_SOBRENOME"));funcionarios.setFuncionario_senha(rs.getString("FUNCIONARIOS_SENHA"));}returnfuncionarios;}publicvoidremove(Funcionariosfuncionario)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");statement.setLong(1,funcionario.getFuncionario_cad());statement.execute();statement.close();}}
Aparentemente está tudo OK, mas falta você mandar o código do seu JSP para darmos uma olhadinha.
dcorteztec
Alterei minha action e minha classe impl e agora esta inserindo no banco só que null e estou usando uma interface.
packagebr.com.FuncionariosDAO;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importcom.opensymphony.xwork2.ActionSupport;importbr.com.Funcionarios.Funcionarios;importbr.com.Funcionarios.Connecty.*;publicclassFuncionariosDAOextendsActionSupportimplementsFuncionarioIn{privatestaticfinallongserialVersionUID=1L;privateConnectionconnection;publicFuncionariosDAO(Connectioncon){this.connection=con;}publicFuncionariosDAO(){try{this.connection=ConnectionFactory.getConnection();}catch(SQLExceptione){e.printStackTrace();}}publicvoidcreateFuncionario(Funcionariosfuncionario)throwsSQLException{Stringsql="INSERT INTO funcionarios (FUNCIONARIOS_NOME, FUNCIONARIOS_SENHA, FUNCIONARIOS_SOBRENOME) "+"VALUES(?,?,?)";PreparedStatementstatement=connection.prepareStatement(sql);statement.setString(1,funcionario.getFuncionario_nome());statement.setString(2,funcionario.getFuncionario_senha());statement.setString(3,funcionario.getFuncionario_sobrenome());statement.execute();statement.close();}publicList<Funcionarios>getList()throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS");ResultSetrs=statement.executeQuery();List<Funcionarios>funcionarios=newArrayList<Funcionarios>();while(rs.next()){Funcionariosfuncionario=newFuncionarios();funcionario.setFuncionario_cad(rs.getLong("funcionarios_cad"));funcionario.setFuncionario_nome(rs.getString("funcionarios_nome"));funcionario.setFuncionario_senha(rs.getString("funcionarios_senha"));funcionario.setFuncionario_sobrenome(rs.getString("funcionarios_sobrenome"));funcionarios.add(funcionario);}rs.close();statement.close();returnfuncionarios;}publicvoidupdateFuncionarios(Funcionariosfuncionario)throwsSQLException{PreparedStatementstatement=connection.prepareStatement("UPDATE FUNCIONARIOS SET FUNCIONARIOS_NOME=?, FUNCIONARIOS_SENHA=?, FUNCIONARIOS_SOBRENOME=?");statement.setString(1,funcionario.getFuncionario_nome());statement.setString(2,funcionario.getFuncionario_senha());statement.setString(3,funcionario.getFuncionario_sobrenome());statement.execute();statement.close();}publicFuncionariosgetFuncionarios(LongfuncionarioId)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=?");Funcionariosfuncionarios=newFuncionarios();statement.setLong(1,funcionarioId);ResultSetrs=statement.executeQuery();while(rs.next()){funcionarios.setFuncionario_cad(rs.getLong("FUNCIONARIOS_CAD"));funcionarios.setFuncionario_nome(rs.getString("FUNCIONARIOS_NOME"));funcionarios.setFuncionario_sobrenome(rs.getString("FUNCIONARIOS_SOBRENOME"));funcionarios.setFuncionario_senha(rs.getString("FUNCIONARIOS_SENHA"));}returnfuncionarios;}publicvoiddeleteEmpregado(LongfuncionarioId)throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("DELETE FROM FUNCIONARIOS WHERE FUNCIONARIOS_CAD=? ");statement.setLong(1,funcionarioId);statement.execute();statement.close();}publicList<Funcionarios>listfuncionarios()throwsSQLException{PreparedStatementstatement=this.connection.prepareStatement("SELECT * FROM FUNCIONARIOS");ResultSetrs=statement.executeQuery();List<Funcionarios>funcionarios=newArrayList<Funcionarios>();while(rs.next()){Funcionariosfuncionario=newFuncionarios();funcionario.setFuncionario_cad(rs.getLong("funcionarios_cad"));funcionario.setFuncionario_nome(rs.getString("funcionarios_nome"));funcionario.setFuncionario_senha(rs.getString("funcionarios_senha"));funcionario.setFuncionario_sobrenome(rs.getString("funcionarios_sobrenome"));funcionarios.add(funcionario);}rs.close();statement.close();returnfuncionarios;}}
Se seu objeto funcionario da Action é do tipo Funcionarios que possui um atributo nome,
então o correto é funcionario.nome com certeza.
dcorteztec
funfou vlw amigo jyoshiriro foi um grande professor struts 1 eu consigo fazer muita coisa mas o struts ainda um mistério mas estou evoluindo
eu alterei isso
Quanto a esse novo erro, parece que o objeto da chave primária não está chegando na Action ou está vindo um valor ilegal (String ao invés de int, por exemplo)
dcorteztec
Agora esta tudo resolvido muito obrigado pela ajuda aprendi bastante o erro era que tinha um long em ves de Long