error prepare statement

Iniciado por sapito169, 23 Febrero 2009, 06:12 AM

0 Miembros y 1 Visitante están viendo este tema.

sapito169



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


            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

CitarEl índice 1 está fuera de intervalo

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

cornell

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.:


String sps_productos = "select * from producto where cod_pro="


Tu parametrización quedaria de esta forma:


PreparedStatement st = cn.prepareStatement(sps_productos  + "'?'");


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

Saludos.
Utalca

sapito169

Cita de: 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 así. Por ej.:


String sps_productos = "select * from producto where cod_pro="


Tu parametrización quedaria de esta forma:


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

cornell

Entonces, como estas trabajando con procedimiento almacenado debe ser de esta forma:



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());
      }
}
Utalca