Olá, estou fazendo um exercício da caelum fj21 e gostaria que vocês me ajudassem a resolver um erro. Antes de tudo estou usando o sql sever(algumas pessoas me indicaram usar o mysql, mas eu prefiro utilizar o sql sever mesmo.) e o apache tomcat 7.
o exercício é bem simples:
uma pagina html foi criada para inserir dados no banco de dados através de uma servlet e uma classe DAO/JDBC. Eu testei a conexão e a classe DAO inserindo dados através de uma classe principal (sem servlet) e funcionou normalmente. Testei o servlet sem usar o banco de dados (fazendo que os dados enviados na requisição fossem escritos na pagina html de response) e também funcionou normalmente. Porém, quando adiciono a os parametros do requeste na classe DAO aparece o seguinte erro:
execeção: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: Must declare the scalar variable "@P0@P1@P2"
abaixo segue o código completo:
Classe conectionFactory:
[code]public class ConnectionFactory {
String connectURL=“jdbc:sqlserver://localhost:1433;databaseName=Agenda;”;
String user=“sa”;
String password=“12345”;
public Connection getConnection(){
try{
return DriverManager.getConnection(connectURL,user,password);
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}[/code]
a classe DAO:
[code]public class ContatoDAO {
private Connection connection;
public ContatoDAO(){
this.connection=new ConnectionFactory().getConnection();
}
public void adicionaContato(Contato contatos){
String sql="insert into Contato(nome,endereco,email,dataNascimento)"
+ "values(?,?,?,?)";
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1,contatos.getNome());
stmt.setString(2, contatos.getEndereco());
stmt.setString(3, contatos.getEmail());
stmt.setDate(4, new Date(contatos.getDataNascimento().getTimeInMillis()));
//executa
stmt.execute();
stmt.close();
connection.close();
}catch(SQLException e){
System.out.println("Erro ao adicionar contato");
throw new RuntimeException(e);
}
}
}[/code]
o servlet:
public class AdicionacontatoServlet extends HttpServlet{
protected void service(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
PrintWriter out = response.getWriter();
// pegando os parâmetros do request
String nome = request.getParameter("nome");
String endereco= request.getParameter("endereco");
String email= request.getParameter("email");
String dataTexto = request.getParameter("dataNascimento");
Calendar dataNascimento=null;
//fazendo a converção da data
try {
Date date= new SimpleDateFormat("dd/MM/yy").parse(dataTexto);
dataNascimento= Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println("Erro de conversão de data");
return;
}
//montar o objeto contato
Contato contato=new Contato();
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
contato.setDataNascimento(dataNascimento);
//salva o contato
ContatoDAO dao= new ContatoDAO();
dao.adicionaContato(contato);
out.println("<html>");
out.println("Contato " + contato.getNome() +
" adicionado com sucesso");
out.println("</body>");
out.println("</html>");
}
}
[code]a pagina HTM:
E-mail:
Endereço:
Data Nascimento:
e no final a exceção que escrevi no inicio:
desde já agradeço.