java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 2.
Abaixo um trecho do meu código...
Muito Obrigado!!
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 + "%'");
...
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…
publicjava.sql.DateConverteData(Stringsdata){// recebe a data String converte paraDate SQLGregorianCalendarcalendar=newGregorianCalendar();intano=Integer.parseInt(sdata.substring(6,10));// desmebra a Stringintmes=Integer.parseInt(sdata.substring(3,5));intdia=Integer.parseInt(sdata.substring(0,2));mes=mes-1;// pq aqui é assim 0 p/jan 1 p/fev...calendar.set(ano,mes,dia);Datedata=newjava.sql.Date(calendar.getTimeInMillis());returndata;}
C
CassolatoPJ
Tente…
SimpleDateFormat sdf = new SimpleDateFormart("mm/DD/yyyy");
sdf.parse(dataAserConvertida);
R
rdo_mariniPJ
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!!
C
CassolatoPJ
Irmao, fiz um exemplinho pra ti...
importjava.util.Date;importjava.text.*;publicclassTeste{publicTeste(){Stringdata="23/12/1986";SimpleDateFormatsdf=newSimpleDateFormat("dd/MM/yyyy");try{Datedate=sdf.parse(data);System.out.println(DateFormat.getDateInstance(DateFormat.LONG).format(date));// Sequizer converter pra java.sql.DateSystem.out.println(newjava.sql.Date(date.getTime()));}catch(Exceptionex){ex.printStackTrace();}}publicstaticvoidmain(String[]args){newTeste();}}
OK ?
para comparar tu usa data do tipo java.sql.Date, ok ?
R
rdo_mariniPJ
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!!
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 + "%'");
...
J
jaireltonPJ
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()?
R
rdo_mariniPJ
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…
C
CassolatoPJ
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)
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();
}
Espero ter ajudado :joia:
R
rdo_mariniPJ
Perfeito!! Deu certo e pude entender claramente… muito obrigado mesmo!!!