Olá,
Sou novo no grupo e também em programação java.
Preciso terminar um trabalho, só que estou me matando (literalmente) para usar um campo Date de uma tabela e até agora nada.
A questão é a seguinte:
Estou montando um site em Java e preciso fazer um SELECT e repassar o resultado deste, para uma página web. Qndo os campos da tabela que são passados pelo SELECT são do tipo “Integer, Char, VarChar” funciona blz, mas quando o campo é do tipo “Date” ih, aí dá erro. Uso um Banco Interbase.
500 Servlet Exception
java.lang.NullPointerException
at Conpedidodata.doPost(Conpedidodata.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:105)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:190)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:165)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:221)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:253)
at com.caucho.server.port.WorkerThread.run(WorkerThread.java:129)
at java.lang.Thread.run(Thread.java:536)
Mostre-nos o que acontece na linha 101.
Mas seja o que for, você está tentando executar um método de um objeto que ainda não foi inicializado,portanto é null. Daí a exceção.
Tem um bug bastante sutil aqui: pela especificacao, Servlets nao podem possuir variaveis de instancia, ja que uma mesma instancia pode processar diversos requests em paralelo. Por essas e outras, o comportamento deste servlet nao eh nada confiavel…
Acho que você pode fazer duas ou três coisas: 1: Faça um log de seu método: Antes de cada linha que for mexer em buf faça algo como:
System.out.ptintln("Antes de "buf = new StringBuffer(); ": " + buf);
...
System.out.ptintln("Antes de "buf.append("<table border= 1 cellspacing=1>"); ": " + buf);
...
System.out.ptintln("Antes de "output.println( buf.toString() );": " + buf);
...
Pode até ser algo bem canhestro, mas deve te dar alguma idéia. 2.1: Você poderia alocar (nossa, é termo de C++!! :shock: ) o StringBuffer já na declaração:
private StringBuffer buf = new StringBuffer();
Para evitar os problemas levantados pelo cv, sempre esvazie o buffer no início do método doPost():
buf.setLenght(0);
2.2: Já que aparentemente você está usando buf apenas dentro de doPost(), faça dele uma variável deste método ao invés de ser um atributo da classe.
Declarei a variável buf dentro do “doPost()”.
Aquele erro que dava por causa da linha 101, lembra? Pois é, parou de dar este erro, mas a resposta foi uma página totalmente em branco. Acho que ele ainda sim está passando “null” como resposta.
Declarei a variável buf dentro do “doPost()”.
Aquele erro que dava por causa da linha 101, lembra? Pois é, parou de dar este erro, mas a resposta foi uma página totalmente em branco. Acho que ele ainda sim está passando “null” como resposta.[/quote]
Não, você não declarou a variável buf dentro do método doPost. Você a inicializou lá dentro. O que provavelmente está acontecendo no seu servlet é que o processamento está jogando um SQLException e você não sabe disso. Altere o código da seguinte forma:
Fiz as alterações que vc falou, e deu o seguinte erro:
Problemas no login
interbase.interclient.SQLException: [interclient][interbase] Dynamic SQL Error SQL error code = -206 Column unknown DTEMISSAO Client SQL dialect 1 does not support reference to DATE datatype.
Fiz as alterações que vc falou, e deu o seguinte erro:
Problemas no login
interbase.interclient.SQLException: [interclient][interbase] Dynamic SQL Error SQL error code = -206 Column unknown DTEMISSAO Client SQL dialect 1 does not support reference to DATE datatype.
O que isso quer dizer?[/quote]
Quer dizer que você não pode fazer um “ResultSet.getDate(…)” para o valor da coluna DTEMISSAO. Um chute: tente pegar o dado com “ResultSet.getString(…)”.
Usei o “ResultSet.getString()”, mas o erro continuou o mesmo de quando usava “ResultSet.getDate()”.
Ou seja
Problemas no login
interbase.interclient.SQLException: [interclient][interbase] Dynamic SQL Error SQL error code = -206 Column unknown DTEMISSAO Client SQL dialect 1 does not support reference to DATE datatype
[quote=“brsna”]Usei o “ResultSet.getString()”, mas o erro continuou o mesmo de quando usava “ResultSet.getDate()”.
Ou seja
Problemas no login
interbase.interclient.SQLException: [interclient][interbase] Dynamic SQL Error SQL error code = -206 Column unknown DTEMISSAO Client SQL dialect 1 does not support reference to DATE datatype
*****************************[/quote]
O problema é extamente esse kra, toda vez que eu tento usar na minha query Sql um campo da tabela que seja do tipo “Date” dá esse erro.[/quote]
Caro brsna,
não me chame de “caro” . Pode chamar de Daniel direto .
Bom, você já tentou executar esta mesma query no console do Interbase (IBConsole) para saber se ela está de fato correta? E a coluna DTEMISSAO de fato existe na tabela PEDIDO?