tomcat_jdbc

3 respostas
cadu

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 <a href="http://java.io">java.io</a>.<em>;

import javax.servlet.</em>;

import javax.servlet.http.<em>;

import java.util.</em>;

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( "&lt;H2&gt;Obrigado  " + nome +
                   " por se cadastrar no Shopping Gospel.&lt;/H2&gt;" );
  else
     output.print( "&lt;H2&gt;Um erro ocorreu. " +
                   "Por favor tente mais tarde.&lt;/H2&gt;" );

  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 );

}

}

}

3 Respostas

C

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.
urubatan

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

cadu

valeu pessoal !!!

descobri…

era o drive do banco de dados

Criado 29 de julho de 2003
Ultima resposta 5 de ago. de 2003
Respostas 3
Participantes 3