Help me

13 respostas
B

Olá grupo,

Preciso terminar um trabalho, só que estou me matando para usar um campo Date de uma tabela e até agora nada.
A questão é a seguinte 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 é Date, ih, aí dá erro. Uso um Banco Interbase.

Se alguém puder me ajudar agradeço.
T+

Bruno


O último código com o qual tentei foi este:

import javax.servlet.<em>;

import javax.servlet.http.</em>;

import <a href="http://java.io">java.io</a>.<em>;

import java.sql.</em>;
public class Conpedidodata extends HttpServlet {

private Connection c = null;

private String s;

public void init( ServletConfig config )

throws ServletException

{

String url =jdbc:interbase://bruno/mbanco.gdb”;

super.init( config );

try {

Class.forName( interbase.interclient.Driver );

c = DriverManager.getConnection(url,SYSDBA,masterkey);

}

catch ( Exception e ) {

e.printStackTrace();

c = null;

}

}

public void doPost ( HttpServletRequest request,

HttpServletResponse response )

throws ServletException, IOException

{

String pedido;

pedido = request.getParameter( pedido );

try {

String query = "SELECT P.DTEMISSAO " +

"FROM PEDIDO P, REPRESENTANTE R, STPEDIDO SP " +

"WHERE P.CDREPRESENTANTE = R.CDREPRESENTANTE AND " +

"P.CDSTPEDIDO = SP.CDSTPEDIDO AND " +

P.CDPEDIDO = '” + pedido + “’”;

Statement st = c.createStatement();

ResultSet rs = st.executeQuery( query );

ResultSetMetaData rsmd = rs.getMetaData();

rs.next();

s = rs.getString( dtemissao );

st.close();

}

catch ( SQLException sqlex ) {

System.err.println ( "Problemas no Login " );

sqlex.printStackTrace();

}

PrintWriter output;

response.setContentType( text/html ); //tipo de conteúdo

output = response.getWriter();

output.println( “\n );

output.println( "Data: " + s + “\n );

output.println( “\n );

output.close();

}

}

13 Respostas

N

q erro? em q linha? poste o resultado do printStackTrace()…

B

Caro Neto,

O erro é que quando execuatado o código, ele não passado nada, na página aparece apenas NULL como resposta do SELECT.

R

Conseguisse rodar esse SQL no prompt do banco ?

Não tem “” demais na linha:
“P.CDPEDIDO = '” + pedido + “’”; ?

[]s

B

Caro renataopb,

A query SQL funciona blz quando executada no banco.
Quanto aos “” não são demais, pois já usei o mesmo código para outros campos do banco que não sejam do tipo “Date” e funciona blz, o problema é quando vou passar um campo do tipo “Date” ele retorna NULL.

Att

Bruno

R

Prezado Brunão hehehehe,

Dica de quem já sofreu por causa desses benditos SQLs,

Debugar as paradas na hora que tiveres executando, manda ele imprimir o query na tela antes de executar, eu várias vezes tive o problema de o java quebrar o sql (inserir um \n) do nada e o sql parar de rodar por isso.

Não creio que seja problema de Java, e sim de leitura da query.

testa ae e dá um reply

[]s

B

Caro Renato,

Infelizmente não funcionou, fiz o indicado e o resultado foi o seguinte:
Pedi para enviar a query Sql para tela, a query veio certinha e o resultado continua NULL.

Sql: SELECT P.DTEMISSAO FROM PEDIDO P, REPRESENTANTE R, STPEDIDO SP WHERE P.CDREPRESENTANTE = R.CDREPRESENTANTE AND P.CDSTPEDIDO = SP.CDSTPEDIDO AND P.CDPEDIDO = ‘01/00001’ Resultado sql: null

Depois só para testar se a query estava mesmo certa troquei o “SELECT P.DTEMISSAO” para “SELECT P.CDPEDIDO”, e a query passada foi a mesma de antes, e o resultado deixa de ser NULL.

Sql: SELECT P.CDPEDIDO FROM PEDIDO P, REPRESENTANTE R, STPEDIDO SP WHERE P.CDREPRESENTANTE = R.CDREPRESENTANTE AND P.CDSTPEDIDO = SP.CDSTPEDIDO AND P.CDPEDIDO = ‘01/00001’ Resultado sql: 01/00001

Eu acho que meu problema é na hora de passar datas do InterBase para o Java, pode ser o formato de data do Interbase que o Java não aceita ou vice-versa sei lá, só sei que não consigo resolver isso.

Se tiveres mais alguma sugestão, agradeço desde já.

Att.

Bruno

N

tá, mas qual o problema de ser null? se o ResultSet retornado for vazio?

try {

String query = "SELECT P.DTEMISSAO " +

"FROM PEDIDO P, REPRESENTANTE R, STPEDIDO SP " +

"WHERE P.CDREPRESENTANTE = R.CDREPRESENTANTE AND " +

"P.CDSTPEDIDO = SP.CDSTPEDIDO AND " +

P.CDPEDIDO = '” + pedido + “’”;

Statement st = c.createStatement();

ResultSet rs = st.executeQuery( query );

ResultSetMetaData rsmd = rs.getMetaData();

rs.next();    // <<<<— AQUI!!

s = rs.getString( dtemissao );

st.close();

}

catch ( SQLException sqlex ) {

System.err.println ( "Problemas no Login " );

sqlex.printStackTrace();

}

onde tá comentado <<<— AQUI, vc pode fazer:

if (rs.next()) {

s = rs.getString(dtemissao);

} else {

s = NENHUM REGISTRO ENCONTRADO;

}

não é isso?

R

Outra dúvida que acabou de me surgir, o que acontece quando a variável “pedido” tem algum erro ?

É possível que ela esteja sem nenhum valou ou com algum valor estranho para o banco ? Pq isso ocasionaria um “null”, caso não encontrasse nada, certo ?

[]s

R

Daí Neto,

Ele disse num outro post que testou o query no prompt do banco e que lá retorna a pesquisa, mas que no java não.

O problema não é voltar vazio, e sim voltar resposta no banco e voltar vazio na aplicação.

Capisca ?

[]s

B

Neto, fiz o modificação que vc indicou mas ainda sim o resultado foi NULL.

B

Neto, fiz o modificação que vc indicou mas ainda sim o resultado foi NULL.

B

Renato,

Isso mesmo. Quando a variável “pedido” tem algum erro qq que seja ele o valor retornado é sempre “null”, o que não é o caso porque quando eu peço para retornar a query Sql para tela junto com o resultado, o lugar reservado a variável “pedido” volta com valor correto, enquanto que o resultado em si volta “null”.

Teria como formatar a data dentro da query Sql?

Att.

Bruno

R

Daí Bruno,

Não sei se o Interbase usa o mesmo padrão de sql que o Oracle, mas neste, basta tu usares o to_char e/ou o to_date. Às vezes tem q fazer uma bruxaria fedida :roll:

Se não souberes como usar esses dois comandos, dá uma procuradinha no google que vais achar rapidinho.

[]s e boa sorte :wink:

Criado 19 de novembro de 2003
Ultima resposta 20 de nov. de 2003
Respostas 13
Participantes 3