tomcat_jdbc

alguem poderia me ajudar e dizer o q está errado ???

Starting service Tomcat-Standalone
Apache Tomcat/4.0.4
Starting service Tomcat-Apache
Apache Tomcat/4.0.4
ERRO: Problemas ao adicionar nova entrada
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Tipo de da
dos imcompatÝvel na expressÒo de critÚrio.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3065)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at CadastroCliente.insertIntoDB(CadastroCliente.java:65)
at CadastroCliente.doPost(CadastroCliente.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV

alve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve
.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
  1. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
    ava:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
    .java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
    rValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
    .java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
    ava:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
    .java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:

  2. at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
    .java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
    ve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
    .java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
    a:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso
    r.java:1027)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja
    va:1125)
    at java.lang.Thread.run(Thread.java:536)

meu código:

import java.io.;
import javax.servlet.
;
import javax.servlet.http.;
import java.util.
;
import java.sql.*;

public class CadastroCliente extends HttpServlet {
private Statement statement = null;
private Connection connection = null;
private String URL = “jdbc:odbc:CadastroCliente”;//ponte ODBC-JDBC

public void init( ServletConfig config )
throws ServletException
{
super.init( config );

  try {
     Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
     connection =
        DriverManager.getConnection( URL, "kairos", "1234mudar" );
  }
  catch ( Exception e ) {
     e.printStackTrace();
     connection = null;
  }

}

public void doPost( HttpServletRequest req,
HttpServletResponse res )
throws ServletException, IOException
{
String nome,cpf,endereco,cidade,estado,telefone,email,data_nascimento;
nome = req.getParameter( “Nome” );
cpf = req.getParameter( “CPF” );
endereco = req.getParameter( “Endereco” );
cidade = req.getParameter( “Cidade” );
estado = req.getParameter( “Estado” );
telefone = req.getParameter( “Telefone” );
email = req.getParameter( “Email” );
data_nascimento = req.getParameter( “Data Nascimento” );

  PrintWriter output = res.getWriter();
  res.setContentType( "text/html" );

  boolean success = insertIntoDB(
     "'"+ nome +  "','" + cpf + "','"+ endereco +
     "','"+cidade+"','"+estado+"','"+telefone
     +"','"+email+"','"+data_nascimento+ "'" );

  if ( success )
     output.print( "<H2>Obrigado  " + nome +
                   " por se cadastrar no Shopping Gospel.</H2>" );
  else
     output.print( "<H2>Um erro ocorreu. " +
                   "Por favor tente mais tarde.</H2>" );

  output.close();

}

private boolean insertIntoDB( String stringtoinsert )
{
try {
statement = connection.createStatement();
statement.execute(
“INSERT INTO CadastroCliente values (” + stringtoinsert + “);” );
statement.close();
}
catch ( Exception e ) {
System.err.println(
“ERRO: Problemas ao adicionar nova entrada” );
e.printStackTrace();
return false;
}

  return true;

}

public void destroy()
{
try {
connection.close();
}
catch( Exception e ) {
System.err.println( “Problema ao fechar banco de dados” );
}
}
}

Olá,
Acho que este seu código deve ser somente para testes, pois esta forma de se conectar ao banco de dados e ainda guardar a conexão como um campo privado de um Servlet não é muito eficiente.
Fiz uma leitura rápida em seu código e vi algo meio estranho, no metodo de inclusão :

 try { 
      statement = connection.createStatement(); 
      statement.execute( 
         "INSERT INTO CadastroCliente values (" + stringtoinsert + ");"
      ); 
      statement.close(); 
}

Note que tem um "ponto e virgula" no final do seu comando SQL, e se em seu programa estiver realmente assim está errado, a não ser que a sintaxe SQL do Access for diferente da maioria.

o ; é normal para alguns BD, mas parece que o problema é o seguinte, esta sendo inserido um valor em um campo de tipos diferentes, percebi que ali não esta relacionado o campo ID da tabela,
provavelmente resolva o problema se você especificar o nome dos campos no insert, mas isto só vai funcionar se o campo de indice (que pelo que parece o access criou para você e deve ser um integer) for auto incrementavel

valeu pessoal !!!

descobri…

era o drive do banco de dados