Galera,
Executei um select e para ver se achou registro, usei rs.next, que me retorna false; porém, qdo executo o mesmo select no shell, me mostra varios registros.
Alguém tem alguma idéia de como resolver isso?
Galera,
Executei um select e para ver se achou registro, usei rs.next, que me retorna false; porém, qdo executo o mesmo select no shell, me mostra varios registros.
Alguém tem alguma idéia de como resolver isso?
Posta o código ai, pra gente ver?
kra posta seu código aí para eu dar uma olhada e tentar te ajudar.
flw
Verifique se a forma como vc faz conexão ao banco está correta. Se estiver, imprima sua query no prompt, pra ver se ela está correta.
Há grandes possibilidades de erro se vc estiver fazendo algo como:
"SELECT * FROM usuarios WHERE nome = " + nome;
Falow! :thumbup:
Ou os filtros, ou o select, ou o banco esta diferente do teste que vc esta fazendo em shell
Ou sei lá, seu select é:
"SELECT * FROM usuarios WHERE nome = " + nome;
Eu normalmente uso PreperedStatement mas tenta escreve-lo assim:
String query = "SELECT * FROM usuarios WHERE nome = "' + nome + "'"
que vai equivaler ao comando
Select * from usuarios where nome = 'Abdon';
Abdon é uma constante neste caso e precisa ser tratada como tal. Mas eu não sei se é este o seu problema, eu acho que escrevendo a query como vc fez
"SELECT * FROM usuarios WHERE nome = " + nome;
da erro de execução da query
boolean isNoCode = false;
if(!isNoCode) {
System.out.println("Sem respostas amigo!");
}
Na verdade, o código que nosso amigo passou acima não é uma boa opção. :thumbdown: Eu citei antes que
String query = "SELECT * FROM usuarios WHERE nome = " + nome;
está muito sujeito à erros e repare que
String query = "SELECT * FROM usuarios WHERE nome = "' + nome + "'"
não está longe do que foi citado. Eu esqueci de passar a forma correta:
String query = "SELECT * FROM usuarios WHERE nome = ?"
Connection connection = ConnectionFactory.getConnection();
PreparedStatement stmt = connection.prepareStatement(query);
[b]stmt.setString(1, codigo);[/b]
ResultSet rs = stmt.executeQuery();
A utilização do método setString é a forma correta para esses casos. Dê uma pesquisada nos métodos de PreparedStatement.
Flw! :thumbup:
Não seria legal colocar o PreparedStatement para ele ver ?
Assim a concatenação das aspas simples não é necessario com o PreparedStatement.
Vou fazer um exemplo simples com e sem PreparedStatement, so para ilustar.
Sem:
public void semPreparedStatement(String pNome){
Statement stmt = null;
ResultSet rset = null;
SQL = "select * from usuario where nome = " + "' + pNome + '";
try {
stmt = conn.prepareStatement(SQL);
rset = stmt.executeQuery();
if(rset.next()){
return rset;
}
} finally {
if (stmt != null)
try {
stmt.close();
} catch(Exception e) {
}
if (conn!= null)
try {
conn.close();
} catch(Exception e) {
}
}
}
}
Com
public void comPreparedStatement(String pNome){
PreparedStatement pstm = null;
ResultSet rset = null;
SQL = "select * from usuario where nome = ?";
try {
pstm = conn.prepareStatement(SQL);
pstm.setString(1, pNome); // se tivesse dois ? o proximo seria pstm.setString(2, segundo) e assim por diante note o tipo "setString"
rset = pstm.executeQuery();
if(rset.next()){
return rset;
}
} finally {
if (stmt != null)
try {
stmt.close();
} catch(Exception e) {
}
if (conn!= null)
try {
conn.close();
} catch(Exception e) {
}
}
}
}
}
Bom fiz as pressas, espero que ajude, se algo tiver errado sintam-se a vontade para opniar e alterar.
esse é a parte q interessa… (só pra não poluir…)
String cpf = replacex(JFcpf.getText(),"-","",".","");
String query = "select FATURA,PARCELAS,DATA_VCTO,VAL_PARCELA,DATA_COMPRA from "+tabelaFatura+
" where DATA_PTO = '0000-00-00' and CPF ='"+cpf+"'";
try{
rs = st.executeQuery(query);
if (!rs.next()){
(..)
eu mandei imprimir no console do netbeans a query e está certinho…
qto a conexão, eu acredito q estah ok, pq faço um select em outra tabela nesta mesma classe e funga blz…
Tente assim:
String cpf = replacex(JFcpf.getText(),"-","",".","");
String query = "select FATURA, PARCELAS, DATA_VCTO, VAL_PARCELA, "+
"DATA_COMPRA from ? where DATA_PTO = '0000-00-00' and CPF =?";
try{
st.setString(1, nomeTabela);
st.setString(2, cpf);
rs = st.executeQuery(query);
if (!rs.next()){
(...)
esse é a parte q interessa… (só pra não poluir…)
String cpf = replacex(JFcpf.getText(),"-","",".",""); String query = "select FATURA,PARCELAS,DATA_VCTO,VAL_PARCELA,DATA_COMPRA from "+tabelaFatura+ " where DATA_PTO = '0000-00-00' and CPF ='"+cpf+"'"; try{ rs = st.executeQuery(query); if (!rs.next()){ (..)eu mandei imprimir no console do netbeans a query e está certinho…
String cpf = replacex(JFcpf.getText(),"-","",".","");
String query = "select FATURA,PARCELAS,DATA_VCTO,VAL_PARCELA,DATA_COMPRA from "+tabelaFatura+
" where DATA_PTO = '0000-00-00' and CPF ='"+cpf+"'";
try{
rs = st.executeQuery(query);
if (rs.next()){//vc tem que fazer se tiver next!
(..)
siga o conselho dos amigos acima usando “?” na sua query…
mais seguro!..
no prompt, sai a query certa:
private void pesquisar() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
JIparcelas.setVisible(true);
String cpf = replacex(JFcpf.getText(),"-","",".","");
String query = "select FATURA,PARCELAS,DATA_VCTO,VAL_PARCELA,DATA_COMPRA from "+tabelaFatura+
" where DATA_PTO = '0000-00-00' and CPF ='"+cpf+"'";
try{
rs = st.executeQuery(query);
if (!rs.next()){
sst("Este cliente não tem parcelas em aberto.");
//prepara a tela para entrada de outro cliente
JFcpf.setEditable(true);
JFcpf.requestFocus();
JBparcelasAbertas.setEnabled(false);
}else{
sst("Pesquisando parcelas abertas do cliente...");
rs.beforeFirst();
//variavel que armazena linha da tabela
int lin = 0;
while (rs.next()){ (...)
???
Acho que achei o problema. Tente assim:
private void pesquisar() {
(...)
Connection con = null;
PreparedStatement stmt = null; // ATENÇÃO: Use PreparedStatement ao invés de Statement
ResultSet rs = null;
String query = "select FATURA, PARCELAS, DATA_VCTO, VAL_PARCELA, " +
" DATA_COMPRA from ? where DATA_PTO = '0000-00-00' and CPF =?";
try {
con = ConnectionFactory.getConnection();
stmt = con.prepareStatement(query); // ATENÇÃO!!!
stmt.setString(1, tabelaFatura);
stmt.setString(2, cpf)
rs = stmt.executeQuery();
(...)
Pode ser que vc não tenha postado, mas acho que o segundo “ATENÇÃO” está faltando não é? Vê se funciona agora!
nada do tipo?
rs.first();
antes do rs.next()??