Problemas com consulta sql (between)

5 respostas
eduardonascimento_du

Olá,
estou com problemas ao tentar gerar uma consulta sql utilizando o comando between.
Estou utilizando o ECLIPSE. Preciso que o sistema entenda que os valores que devem ser comparados no between venham de duas variáveis auxiliares, onde uma representa o código inicial e a outro código final.

Segue abaixo o trecho de código:

String e = "1";
	String d = "50";
	int f = Integer.parseInt(e);
	int g = Integer.parseInt(d);
	
	Statement smt = con.createStatement();
	String sql = "SELECT * FROM CLIENTES WHERE CLICOD BETWEEN f AND g";

O erro que está sendo apresentado é o seguinte:

java.sql.SQLException: [Microsoft] [SQL Server Native Cliente 10.0] [SQL Server] Invalid column name ‘f’

Qual é a melhor forma de eu proceder para conseguir buscar esses dados do intervalo dentro de variáveis ???

Grato desde já,
Eduardo Nascimento Mariano

5 Respostas

leonardoMachado

tenta assim:

String e = 1;

String d = 50;

int f = Integer.parseInt(e);

int g = Integer.parseInt(d);

Statement smt = con.createStatement();
String sql = "SELECT * FROM CLIENTES WHERE CLICOD BETWEEN "+ f + " AND " + g;

fontoura

Cara vai ser bem dificil isso ai funcionar mesmo, pois o seu SQL esta com a letra f e g.

bom acho que vc pode fazer o seguinte:

String sql = “SELECT * FROM CLIENTES WHERE CLICOD BETWEEN ? AND ?”;

PreparedStatement stm = conn.prepareStatement(sql);

//Aqui vc está dizendo que no primeiro interrogação vc quer que seja atribuido o valor de f.

strm.setInt(1, f);

//Aqui vc está dizendo que no segundo interrogação vc quer que seja atribuido o valor de g.

strm.setInt(2, g);

e pede pra rodar a consulta!!!

fontoura

leonardo só lembrando que a solução que vc passou é passivel de ataques tipo SQL Injection!!

rafaelglauber

Oi,

Leia isso: http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html

seu código ficaria mais ou menos assim:

String e = "1"; String d = "50"; int f = Integer.parseInt(e); int g = Integer.parseInt(d); PreparedStatement ps = con.prepareStatement("SELECT * FROM CLIENTES WHERE CLICOD BETWEEN ? AND ?"); ps.setInt(1, f); ps.setInt(2, g); ResultSet rs = ps.executeQuery():

Repare que os parâmetros são as “?” e não o nome de suas variáveis.

eduardonascimento_du

Rafael,
Muito Obrigado !!!
Funcionou !!!

Criado 28 de outubro de 2008
Ultima resposta 28 de out. de 2008
Respostas 5
Participantes 4