Help me

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.;
import javax.servlet.http.
;
import java.io.;
import java.sql.
;

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


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

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.

Conseguisse rodar esse SQL no prompt do banco ?

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

[]s

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

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

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

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?

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

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

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

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

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

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: