Os numeros sao pela ordem. Portanto, se vc tem
INSERT INTO tabela (campo1, campo2, campo3) VALUES (?, ?, ?)
o p.setXxx(1, valor) vai substituir o primeiro ?, p.setXxx(2, outroValor) vai para o segundo ? e assim por diante.Porem, algumas consideracoes sobre o teu exemplo: o setString() coloca aspas automaticamente na hora de substituir o respectivo ? (e essa eh uma grande vantagem, ja que vc ganha em seguranca). Logo, isso significa que fazer
onde o primeiro no lugar do primeiro ? vc deseja que seja colocado o nome do campo nao vai funcionar da maneira esperada, ja que o resultado, apos a substituicao, sera algo como
... AND 'nomeDoCampo' = ?
veja que vai ficar com aspas. Nesses casos de queries montadas dinamicamente, vc vai ter que fazer concatenacao de Strings mesmo. O mesmo vale para o LIKE. Voce nao vai ter sucesso com a expressao
pelo mesmo lance em relacao ao funcionamento do setString(). A solucao para isso eh passar os % pelo setString, como abaixo:
p.setString(1, "%" + variavelComOValor + "%");
isso vai dar conta do recado. Note que vc nao passa as aspas, e sim deixa que a o PreparedStatement faca isso apra voce.
Sobre montar a query dinamicamente quando vc nao sabe de antemao o nome do campo a ser usado, isso somente eh “valido” quando vc vai estar concatenando o nome do campo, e nao o valor, o qual deve ainda ser feito via PreparedStatement.
O teu exemplo
cliente.selectNome=SELECT tc.* FROM tblcliente tc where tc.idcliente = tc.idcliente AND ? LIKE ? AND ? LIKE ? order by nome
pode entao ser feito assim:
cliente.selectNome=SELECT tc.* FROM tblcliente tc where tc.idcliente = tc.idcliente AND #CAMPO# LIKE ? AND #OUTRO_CAMPO# LIKE ? order by nome
onde vc vai mudar, via codigo Java, as string #CAMPO# e #OUTRO_CAMPO# pelo nome do campo. Algo como
String query = props.getProperty("cliente.selectNome");
query = query.replaceAll("#CAMPO#", "nomeDoCampo");
query = query.replaceAll("#OUTRO_CAMPO#", "nomeDoOutroCampo");
PreparedStatement p = conn.prepareStatement(query);
p.setString(1, "%" + like1 + "%");
p.setString(2, "%" + like2 + "%");
ResultSet rs = p.executeQuery();
Rafael