Foro de elhacker.net

Programación => Java => Mensaje iniciado por: sapito169 en 23 Febrero 2009, 06:12 am



Título: error prepare statement
Publicado por: sapito169 en 23 Febrero 2009, 06:12 am


estoy provando sobre el evento keyRealesed de una caja de texto esto

Código:
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection cn;

                cn =
        DriverManager.getConnection("jdbc:sqlserver://localhost:1036;databasename=nwind",
                                 "sa", "");
                PreparedStatement st = cn.prepareStatement("sps_productos '?'");
                st.setString(1,txt.getText());
            } catch (ClassNotFoundException f) {
                JOptionPane.showMessageDialog(null,
                                              "Clase no encontrada descripciom:\n" +
                                              f.getMessage());
            } catch (SQLException f) {
                JOptionPane.showMessageDialog(null,
                                              "error sql descipcion:\n" + f.getMessage());
                                              System.out.print(f.getMessage());
            }

y me sale este error

Citar
El índice 1 está fuera de intervalo

es una bd sqlserverexpress se conecta sin problemas uso java 6 en win xp


Título: Re: error prepare statement
Publicado por: cornell en 23 Febrero 2009, 18:45 pm
me parece que el problema que tienes es con la parametrización para la BD.

¿sps_productos es un String? si fuese asi. Por ej.:

Código:
String sps_productos = "select * from producto where cod_pro="

Tu parametrización quedaria de esta forma:

Código:
PreparedStatement st = cn.prepareStatement(sps_productos  + "'?'");

Espero te sirva, en lo personal nunca lo he realizado pero he leido bastante de esto.

Saludos.


Título: Re: error prepare statement
Publicado por: sapito169 en 23 Febrero 2009, 23:29 pm
me parece que el problema que tienes es con la parametrización para la BD.

¿sps_productos es un String? si fuese así. Por ej.:

Código:
String sps_productos = "select * from producto where cod_pro="

Tu parametrización quedaria de esta forma:

Código:
PreparedStatement st = cn.prepareStatement(sps_productos  + "'?'");

Espero te sirva, en lo personal nunca lo he realizado pero he leido bastante de esto.

Saludos.


sps_productos es un storeprocedure no es una cadena de texto que contenga una consulta select


Título: Re: error prepare statement
Publicado por: cornell en 24 Febrero 2009, 19:53 pm
Entonces, como estas trabajando con procedimiento almacenado debe ser de esta forma:

Código:

try {
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      Connection cn = null;
      CallableStatement proc = null;
      cn = DriverManager.getConnection("jdbc:sqlserver://localhost:1036;databasename=nwind","sa", "");

      proc = cn.prepareCall("{ call sps_productos(?) }");
      proc.setString(1,txt.getText());
      proc.execute();

} finally {
      try {
         proc.close();
         cn.close();
      } catch (ClassNotFoundException f) {
           JOptionPane.showMessageDialog(null, "Clase no encontrada descripciom:\n" + f.getMessage());
      } catch (SQLException f) {
           JOptionPane.showMessageDialog(null, "error sql descipcion:\n" + f.getMessage());
           System.out.print(f.getMessage());
      }
}