Alguem sabe oque pode estar errado em meu select?
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 2.
Abaixo um trecho do meu código…
Muito Obrigado!!
[code]
public LinkedList listaConciliados(int id, Date dataInicial, Date dataFinal) throws SQLException { //metodo que tras parametro o ID do usuario para fazer a select sobre ele, objeto tipo lista ligada(linked list)
conn = retornaConn(); //recupera a conexão com o banco de dados
Statement stmt = conn.createStatement();//cria um objeto que é responsável pelo envio de comandos e recuperação de resultados junto ao SGBD
LinkedList lancamentos = new LinkedList(); //cria objeto do tipo lista para retornar a lista
double saldoCaixa = 0;
double saldoBanco = 0;
double saldoTotal = 0;
try {
ResultSet rs = stmt.executeQuery ("select * from Tab_Extrato where Data between dataInicial and dataFinal and RecDesp = 1 and CodUsuario LIKE '%" + id + "%'");
…[/code]
Uma outra duvida seria como converter uma String para uma java.sql.Date
estou usando a classe GregorianCalendar, porem seu formato não é oque eu preciso… gostaria de converter para dd/mm/yyyy e tb para mm/dd/yyyy e com o codigo abaixo só consigo yyyy/mm/dd…
public java.sql.Date ConverteData(String sdata){
// recebe a data String converte paraDate SQL
GregorianCalendar calendar = new GregorianCalendar();
int ano = Integer.parseInt(sdata.substring(6,10)); // desmebra a String
int mes = Integer.parseInt(sdata.substring(3, 5));
int dia = Integer.parseInt(sdata.substring(0, 2));
mes = mes-1; // pq aqui é assim 0 p/jan 1 p/fev...
calendar.set(ano, mes, dia);
Date data = new java.sql.Date(calendar.getTimeInMillis());
return data;
}
Tente…
SimpleDateFormat sdf = new SimpleDateFormart("mm/DD/yyyy");
sdf.parse(dataAserConvertida);
Ratinho…
Infelizmente não deu certo… acho que o objetos tipo Date da classe SQL só podem usar esse padrão mesmo… YYYY/MM/DD…
Mas vc não me falou nada a respeito do primeiro post nesse mesmo topico… a respeito da select… sabe oque pode ser??
Desde já obrigado!!
Irmao, fiz um exemplinho pra ti…
[code]import java.util.Date;
import java.text.*;
public class Teste {
public Teste() {
String data = "23/12/1986";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date = sdf.parse(data);
System.out.println(DateFormat.getDateInstance(DateFormat.LONG).format(date));
// Sequizer converter pra java.sql.Date
System.out.println(new java.sql.Date(date.getTime()));
}catch(Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new Teste();
}
}[/code]
OK ?
para comparar tu usa data do tipo java.sql.Date, ok ?
Já fiz da forma que vc ensinou acima… mas quando convertemos para DATE do pacote SQL, ele toma novamente o formato YYY/MM/DD.
Outra duvida …
Sabe oq pode estar errado???
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 2.
Abaixo um trecho do meu código…
Muito Obrigado!!
[code]public LinkedList listaConciliados(int id, Date dataInicial, Date dataFinal) throws SQLException { //metodo que tras parametro o ID do usuario para fazer a select sobre ele, objeto tipo lista ligada(linked list)
conn = retornaConn(); //recupera a conexão com o banco de dados
Statement stmt = conn.createStatement();//cria um objeto que é responsável pelo envio de comandos e recuperação de resultados junto ao SGBD
LinkedList lancamentos = new LinkedList(); //cria objeto do tipo lista para retornar a lista
double saldoCaixa = 0;
double saldoBanco = 0;
double saldoTotal = 0;
try {
ResultSet rs = stmt.executeQuery ("select * from Tab_Extrato where Data between dataInicial and dataFinal and RecDesp = 1 and CodUsuario LIKE '%" + id + "%'");
…
[/code]
A questão da data, tente não usar Statement e sim PreparedStatement porque ele já trata isso pra você…
Quanto aos parametros você viu se ele está conectando? A exceção é lançada ao conectar ou no executeQuery()?
Oi… na verdade ele se conecta normalmente… o problema é realmente na query select!!
A respeito de não usar Statement e sim PreparedStatement… qual é a diferença basica entre os dois? e como eu poderia modificar esse meu codigo pra trabalhar com o Prep. Stat. seria muito dificil?
Eu tenho que continuar trazendo os parametros dataInicial e dataFinal no tipo Date do pacote SQL?
Se puder exemplificar pra mim eu agradeceria muito…
Obrigado…
Sobre a pergunta q tu me fez no meu ultimo post…
Olhe na linha que usei o SimpleDateFormat… ele converte pra dd/MM/yyyy.
A diferenca do Statement e Prepared, é que no prepared, tu pode setar os parametros, e fica uma coisa + organizada e facil de dar manutencao no seu código, repare no codigo abaixo(PS: eu nao testei rsr)
[code]String sql = "SELECT *
FROM suaTabela
WHERE nome = ? AND idade = ?"
try {
PreparedStatement ps = seuObojetoDeConecao.prepareStatement(sql);
ps.setString(1, "Cassolato");
ps.setInt(2, 19);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
// codigo desejado
}
}catch(Exception ex) {
ex.printStackTrace();
}[/code]
Espero ter ajudado :joia:
Perfeito!! Deu certo e pude entender claramente… muito obrigado mesmo!!!
Grande Abraço!!
Rodrigo.