Métodos para comandos SQL

2 respostas
P

Boa tarde,

Sou iniciante em java e estou com o seguinte erro:

java.sql.SQLException: Parameter index out of range (0 < 1 ).

aonde tenho minha classe de conexao ao banco de dados e que, toda vez que eu precisar usar o comando, por exemplo, Select, Update…e assim por diante, utilizo um metodo para cada um.

Eis o codigo de um dos métodos:

...

private Connection con;
private ResultSet RS;
private PreparedStatement PS;

...

public ResultSet Select(String SQL, String Conteudo[])
    {
        try
        {
            PS = con.prepareStatement(SQL);
            for (int i=0; i < Conteudo.length; i++ )
            {
                PS.setString(i, Conteudo[i]);
            }
            
            RS = PS.executeQuery();            
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        } 
        return RS;
                
    }

...

E na classe login, onde coloco no evento action do jbutton:

...
try 
 {
     conn.criaConexao();
     
     String SQL = "Select * from usuarios WHERE (?, ?)";
     
     if(usuario.getText().equals("") || senha.getPassword().equals(""))
     {
        JL_erro.setText("* Preencha os campos!");
     }
     
     else
     {  
         SQL = "Select * from usuarios WHERE usuario= '?' AND senha= '?'";
         
         String Conteudo[] = new String[2];
         Conteudo[0]  = usuario.getText();
         Conteudo[1]  = senha.getText();
         
         RS = conn.Select(SQL, Conteudo);
         
         if(RS.next())
         {
             JOptionPane.showMessageDialog(null, "Login ativo");
         }
         
         else 
         {
            JL_erro.setText("* Usuário ou Senha inválida.");
         }
     }         
 } 
 catch(Exception e)
 {
    JOptionPane.showMessageDialog(null, e.toString());
 } 
 finally
 {
     conn.Close();
 }
...

ao ser compilado ele retorna aquele erro que citei no início do tópico…
Se alguem poder ajudar, desde já fico agradecido.

Inté.

2 Respostas

T
for (int i=0; i < Conteudo.length; i++ )  
             {  
                 PS.setString(i, Conteudo[i]);

Em um PreparedStatement, os parâmetros começam na posição 1, não na 0. Uma forma boba de corrigir isso é:

for (int i=0; i < Conteudo.length; i++ )  
             {  
                 PS.setString(i + 1, Conteudo[i]);
P

Vlw pela informação thingol…

e tambem tive que alterar:

SQL = "Select * from usuarios WHERE usuario= '?' AND senha= '?'";

por:

SQL = "Select * from usuarios WHERE usuario= ? AND senha= ?";

sem as aspas simples… :thumbup:

Criado 24 de outubro de 2008
Ultima resposta 24 de out. de 2008
Respostas 2
Participantes 2