Dilema das Datas no BD

Pessoal
tenho um campo Date no Oracle (dtturno)
Na select * from nome da tabela where = ?

eu coloco:

SimpleDateFormat meuformatador =  new SimpleDateFormat("dd/MM/yyyy");
sql.setString(1, meuformatador.format(leo_dtturno));//aqui só aceita string ele não aceita setDate....

Onde o campo (leo_dtturno) no getrs & setters tanto deixando ele com String ou Date eu não consigo jogar para o comando SQL no Where.
E no comando SQL só aceita Date

	            sql = conexao.prepareStatement("select to_date(leo_dtturno,'dd/MM/yyyy') as leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno "+
	            		"where leo_dtturno = ?");

Como faço para chamar o sql.setString sendo q no BD tem que vir Date???

Alguem para ajudar???

Não entendi muito bem sua duvida , mas vamos la !

Vc quer colocar um Objeto Date na condição do seu select ?

Se sim, seria necessario apenas utilizar o metodo setDate do PreparedStatement , certo ?

Olá, como vai?!

Para trabalhar com JDBC no Oracle você deve utilizar os tipos dele, no caso de data deve utilizar oracle.sql.DATE…
Segue um exemplo:

[code]…
StringBuilder sql = new StringBuilder();
sql.append("SELECT RESID, TO_CHAR(RESDTA, ‘DD/MM/YYYY’) ");
sql.append("FROM FEFRESERVAS ");
sql.append(“WHERE RESDTA = ?”);

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
java.util.Date dat = sdf.parse(“22/01/2008”);
Timestamp tsmp = new Timestamp(dat.getTime());

PreparedStatement stmt = con.prepareStatement(sql.toString());
((OraclePreparedStatement) stmt).setDATE(1, new oracle.sql.DATE(tsmp));
ResultSet rs = stmt.executeQuery();
…[/code]
Assim pode usar o setDATE mas do Oracle e se perceber tem um cast para o OraclePreparedStatement para poder usar o setDATE.
Se não quiser ter esse trabalho todo pode passar como String mesmo mas convertendo o parametro na SQL no BD com o TO_DATE, assim:

[code]…
StringBuilder sql = new StringBuilder();
sql.append("SELECT RESID, TO_CHAR(RESDTA, ‘DD/MM/YYYY’) ");
sql.append("FROM FEFRESERVAS ");
sql.append(“WHERE RESDTA = TO_DATE(?, ‘DD/MM/YYYY’)”);

PreparedStatement stmt = con.prepareStatement(sql.toString());
stmt.setString(1, “22/01/2008”);
ResultSet rs = stmt.executeQuery();
…[/code]

Até

[quote=Granella]Olá, como vai?!

Para trabalhar com JDBC no Oracle você deve utilizar os tipos dele, no caso de data deve utilizar oracle.sql.DATE…
Segue um exemplo:

[code]…
StringBuilder sql = new StringBuilder();
sql.append("SELECT RESID, TO_CHAR(RESDTA, ‘DD/MM/YYYY’) ");
sql.append("FROM FEFRESERVAS ");
sql.append(“WHERE RESDTA = ?”);

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
java.util.Date dat = sdf.parse(“22/01/2008”);
Timestamp tsmp = new Timestamp(dat.getTime());

PreparedStatement stmt = con.prepareStatement(sql.toString());
((OraclePreparedStatement) stmt).setDATE(1, new oracle.sql.DATE(tsmp));
ResultSet rs = stmt.executeQuery();
…[/code]
Assim pode usar o setDATE mas do Oracle e se perceber tem um cast para o OraclePreparedStatement para poder usar o setDATE.
Se não quiser ter esse trabalho todo pode passar como String mesmo mas convertendo o parametro na SQL no BD com o TO_DATE, assim:

[code]…
StringBuilder sql = new StringBuilder();
sql.append("SELECT RESID, TO_CHAR(RESDTA, ‘DD/MM/YYYY’) ");
sql.append("FROM FEFRESERVAS ");
sql.append(“WHERE RESDTA = TO_DATE(?, ‘DD/MM/YYYY’)”);

PreparedStatement stmt = con.prepareStatement(sql.toString());
stmt.setString(1, “22/01/2008”);
ResultSet rs = stmt.executeQuery();
…[/code]

Até[/quote]

Nao seria interessante atrelar diretamente com Driver por exemplo utilizar oracle.sql.DATE se mudar o banco conseqüentemente mudará o Driver mas vc irá alterar o codigo para nao utilizar oracle.sql.DATE

Neste caso vc pode resolver desta maneira:

java.util.Date d = new java.util.Date();
pst.setDate(1, new java.sql.Date (d.getTime()));

Caso vc utilize Timestamp
Desta forma:

Date d = new Date();

pst.setTimestamp(1, new Timestamp(d.getTime()));

Olá,
PM : Eu usei o setDate e não deixa compilar dá o erro “The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments
(int, String)”

Granela : Eu tentei da segunda maneira q vc indicou usando a clausula Where To_date
No TextField do Form eu to usando o mesmo nome do objeto criado (getters & setters) do tipo date:

PreparedStatement sql = conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno "+	
			    " where leo_dtturno = TO_DATE(?, 'DD/MM/YYYY')");

SimpleDateFormat meuformatador =  new SimpleDateFormat("DD/MM/YYYY");
sql.setString(1, meuformatador.format(getLeo_dtturnox()));
ResultSet rs = sql.executeQuery();

Mas dá erro na conversão:
“jsp.error.beans.property.conversion”
Se eu crio o objeto (getters & Setters) como String e jogo no where ele não dá erro de compilação mas também dá a mesma menssagem " jsp.error.beans.property.conversion "
Se eu digito uma data válida no setString que tem registros no banco ele lista para mim estranho isso …

Desde já agradeço as Dicas dos Senhores…

[quote=alexlima72]Olá,
PM : Eu usei o setDate e não deixa compilar dá o erro “The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments
(int, String)”

Granela : Eu tentei da segunda maneira q vc indicou usando a clausula Where To_date
No TextField do Form eu to usando o mesmo nome do objeto criado (getters & setters) do tipo date:

PreparedStatement sql = conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno "+	
			    " where leo_dtturno = TO_DATE(?, 'DD/MM/YYYY')");

SimpleDateFormat meuformatador =  new SimpleDateFormat("DD/MM/YYYY");
sql.setString(1, meuformatador.format(getLeo_dtturnox()));
ResultSet rs = sql.executeQuery();

Mas dá erro na conversão:
“jsp.error.beans.property.conversion”
Se eu crio o objeto (getters & Setters) como String e jogo no where ele não dá erro de compilação mas também dá a mesma menssagem " jsp.error.beans.property.conversion "
Se eu digito uma data válida no setString que tem registros no banco ele lista para mim estranho isso …

Desde já agradeço as Dicas dos Senhores…[/quote]

Veja o meu post acima o metodo setDate da Classe PreparedStatment recebe um java.sql.Date e nao uma String de uma lida na documentação

Ramilani12 e resto do pessoal ainda estou apanhando,

Se eu coloco setDate da erro de compilação veja abaixo:

The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments 
 (int, String)

Então eu converto o retorno da String para date e aparece outro erro de conversão:

jsp.error.beans.property.conversion

Se eu coloco o setString com o campo vindo do form ele vem nulo:

sql.setString(1, "leo_dtturnox" );

E não retorna dados. Eu estou usando esta mesma rotina pra verificar se já existe registro no BD com esta da e não deixar fazer update e funciona beleza…eu nunca vi isto!!!

Se eu forço o campo com uma data q tem no BD ele retorna:

sql.setString(1, "10/01/2008" );

tá de rosca esta jossa!!!