Foros del Web » Programación para mayores de 30 ;) » Java »

procedure java y sql

Estas en el tema de procedure java y sql en el foro de Java en Foros del Web. HOLA necesito ayuda, como se ve en el codigo tengo un jcombobox que tiene nombres de peliculas que extrae desde la base de datos ,al ...
  #1 (permalink)  
Antiguo 23/06/2011, 12:20
 
Fecha de Ingreso: junio-2011
Ubicación: chile
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
procedure java y sql

HOLA necesito ayuda, como se ve en el codigo tengo un jcombobox que tiene nombres de peliculas que extrae desde la base de datos ,al momento de seleccionar una pelicula en el combobox deseo hacer una consulta a la BD que me muestre lo que quiero respecto a la pelicula seleccionada.
Mas abajo tengo un SELECT largisimo ,bueno quiero hacer un procedimiento almacenado en sql y llamarlo desde java para no tener que escribir la sentencia completa en java ,(ojala me entiendan)

gracias y disculpen el largo del codigo....




Código:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;


public class consultaPeliculas extends JFrame implements ActionListener
{
    JButton consultar=new JButton("consultar");
    JButton activarLista=new JButton("Activar lista");
    JComboBox combo3=new JComboBox(); 
    JTextArea txtArea=new JTextArea();
    JPanel p1=new JPanel();
    JPanel p2=new JPanel();
    DefaultTableModel modelo = new DefaultTableModel();
    JTable tabla = new JTable(modelo);
    JScrollPane scroll_1=new JScrollPane(tabla);

    public consultaPeliculas()
    {
        super("CONSULA POR PELICULAS");
        Container c=getContentPane();
        c.setLayout(new BorderLayout());


        modelo.addColumn("nombre_region");
        modelo.addColumn("nombre_ciudad");
        modelo.addColumn("nombre_cine");
        modelo.addColumn("numero_sala");
        modelo.addColumn("nombre_pelicula");
        modelo.addColumn("id_funcion");
        modelo.addColumn("id_horario");
        //modelo.addColumn("fecha_horario");
        //modelo.addColumn("fecha_funcion");

        p1.setLayout(new GridLayout(2,2));
        p1.add(activarLista);
        p1.add(combo3);
        p1.add(consultar);




        p2.setLayout(new FlowLayout());
        p2.add(scroll_1);

        c.add(p1,BorderLayout.NORTH);
        c.add(scroll_1,BorderLayout.CENTER);
        setSize(600,400);
        setVisible(true);
        
        consultar.addActionListener(this);
        combo3.addActionListener(this);
        activarLista.addActionListener(this);
    }
    public void actionPerformed(ActionEvent a)
    {
        if(a.getSource()==activarLista)
        {
            // CREANDO LA VARIABLE DE CONECCION
            String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=horario_1;user=sa;password=1234";

            // DECLARANDO LOS OBJETOS JDBC
            Connection con = null;
            Statement stmt = null;
            ResultSet rs = null;

            try
            {
                // ESTABLECIENDO LA CONECCION
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                con = DriverManager.getConnection(connectionUrl);
                // CREANDO Y EJECUTANDO SENTENCIAS SQL.
                String SQL = "SELECT nombre_pelicula FROM pelicula";

                stmt = con.createStatement();
                rs = stmt.executeQuery(SQL);

                // MOSTRANDO E ITERANDO LOS DATOS.
                combo3.removeAllItems();
                while (rs.next())
                {
                    combo3.addItem(rs.getObject("nombre_pelicula"));

                }

            }
            catch (Exception x)
            {
            }
            finally
            {
                    if (rs != null) try { rs.close(); } catch(Exception x) {}
                    if (stmt != null) try { stmt.close(); } catch(Exception x) {}
                    if (con != null) try { con.close(); } catch(Exception x) {}
            }
        }
        if(a.getSource()==consultar)
        {

                 
            // CREANDO LA VARIABLE DE CONECCION
            String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=horario_1;user=sa;password=1234";
            // DECLARANDO LOS OBJETOS JDBC
            Connection con = null;
            Statement stmt = null;
            ResultSet rs = null;
            try
            {
                // ESTABLECIENDO LA CONECCION
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                con = DriverManager.getConnection(connectionUrl);
                // CREANDO Y EJECUTANDO SENTENCIAS SQL.
                String SQL="SELECT" +
                "pelicula.nombre_pelicula, ciudad.nombre_ciudad, region.nombre_region," +
                "cine.nombre_cine, sala.numero_sala, funcion.hora_funcion, horario.fecha_horario " +
                "FROM pelicula,ciudad,region,cine,sala,funcion,pelicula_sala,horario " +
                "WHERE (region.id_region=ciudad.id_region AND"+
                "cine.id_ciudad=ciudad.id_ciudad AND"+
                "cine.id_cine=sala.id_cine AND"+
                "sala.id_sala=pelicula_sala.id_sala AND"+
                "pelicula.id_pelicula=pelicula_sala.id_pelicula AND"+
                "horario.id_pelicula_sala=pelicula_sala.id_pelicula_sala AND"+
                "horario.id_funcion=funcion.id_funcion) AND "+
                "pelicula.nombre_pelicula='"+combo3.getSelectedItem()+"'";
             
                stmt = con.createStatement();
                rs = stmt.executeQuery(SQL);

                

                // MOSTRANDO E ITERANDO LOS DATOS.
                
                while(rs.next())
                {
                     Object [] fila = new Object[7];
                     for (int i=0 ; i<7 ; i++)
                        fila[i] = rs.getObject(i+1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.
                    // Se añade al modelo la fila completa.
                    modelo.addRow(fila);
                    
                }
                
            }
            catch (Exception x)
            {
            }
            finally
            {
                    if (rs != null) try { rs.close(); } catch(Exception x) {}
                    if (stmt != null) try { stmt.close(); } catch(Exception x) {}
                    if (con != null) try { con.close(); } catch(Exception x) {}
            }
            
        }
        
    }
    public static void main(String args[])
    {
        consultaPeliculas cp=new consultaPeliculas();
        cp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Última edición por cayu2008; 23/06/2011 a las 12:25
  #2 (permalink)  
Antiguo 23/06/2011, 14:26
 
Fecha de Ingreso: junio-2011
Mensajes: 39
Antigüedad: 13 años, 4 meses
Puntos: 16
Respuesta: procedure java y sql

Bueno hasta donde tengo entendido un procedimiento almacenado no te va a servir para lo que necesitas, que segun entiendo, es almacenar en el el query "largisimo", para ese proposito lo que te sirve es crear una vista en SQL server con el query complejo y luego desde Java la consultas con un query de una linea.

La creación de la vista para tu caso sería algo como
Código HTML:
CREATE VIEW mivista AS
SELECT 
                pelicula.nombre_pelicula, ciudad.nombre_ciudad, region.nombre_region, 
                cine.nombre_cine, sala.numero_sala, funcion.hora_funcion, horario.fecha_horario  
                FROM pelicula,ciudad,region,cine,sala,funcion,pelicula_sala,horario  
                WHERE (region.id_region=ciudad.id_region AND
                cine.id_ciudad=ciudad.id_ciudad AND
                cine.id_cine=sala.id_cine AND
                sala.id_sala=pelicula_sala.id_sala AND
                pelicula.id_pelicula=pelicula_sala.id_pelicula AND
                horario.id_pelicula_sala=pelicula_sala.id_pelicula_sala AND
                horario.id_funcion=funcion.id_funcion);
y luego desde Java tu consulta se reduciria a algo como:

Código HTML:
String SQL="SELECT * FROM mivista WHERE nombre_pelicula ='"+combo3.getSelectedItem()+"'";
Espero que sea de ayuda.
  #3 (permalink)  
Antiguo 24/06/2011, 09:20
 
Fecha de Ingreso: junio-2011
Ubicación: chile
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: procedure java y sql

GRACIAS ME SIRVIO MUCHO ........................




¿se pueden usar triggers?i mean,

como podria usar triggers desde java? gracias.
  #4 (permalink)  
Antiguo 24/06/2011, 09:45
 
Fecha de Ingreso: junio-2011
Mensajes: 39
Antigüedad: 13 años, 4 meses
Puntos: 16
Respuesta: procedure java y sql

Los triggers son procedimientos que operan sobre tablas de BD y se ejecutan cuando hay alguna acción sobre los registros de esa tabla.

La respuesta es: NO pueden ser ejecutados directamente desde Java, es la misma base de datos la que los ejecuta cuando hay alguna acción sobre los registros de la tabla para la cual se ha programado el trigger.
__________________
Saludos desde Colombia.
http://labs.distrit.co
  #5 (permalink)  
Antiguo 24/06/2011, 10:43
 
Fecha de Ingreso: junio-2011
Ubicación: chile
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: procedure java y sql

entonces tendria que insertar desde java y en la BD se deberia ejecutar el trigger creado?
  #6 (permalink)  
Antiguo 24/06/2011, 11:17
 
Fecha de Ingreso: junio-2011
Mensajes: 39
Antigüedad: 13 años, 4 meses
Puntos: 16
Respuesta: procedure java y sql

Si debe insertar desde Java y el trigger se disparará automáticamente si lo creó para ejecutarse despues o antes de una inserción,

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm
__________________
Saludos desde Colombia.
http://labs.distrit.co
  #7 (permalink)  
Antiguo 24/06/2011, 12:29
 
Fecha de Ingreso: junio-2011
Ubicación: chile
Mensajes: 5
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: procedure java y sql

tabla 1 :Ciudad :id_ciudad(pk), nombre_ciudad, id_region(FK)

tabla 2: Region :id_region(pk), nombre_region


Lo que quiero hacer es insertar en ciudad el id_region , pero desde el combobox se seleciona el nombre de la region .
Gracias.... de antemano



pedaso de codigo en java

Código:
public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==insertarC)
        {
            // CREANDO LA VARIABLE DE CONECCION
            String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=prueba_1;user=sa;password=1234";

            // DECLARANDO LOS OBJETOS JDBC
            Connection con = null;
            PreparedStatement insertar = null;
            ResultSet rs = null;
            try
            {
                // ESTABLECIENDO LA CONECCION
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                con = DriverManager.getConnection(connectionUrl);
                JOptionPane.showMessageDialog(null,"-- lograstes la coneccion  --");
                // CREANDO Y EJECUTANDO SENTENCIAS SQL.
                if (null == insertar)
                {
                    insertar = con.prepareStatement("INSERT INTO ciudad(id_ciudad,nombre_ciudad,id_region) VALUES (?,?,?)");
                }
                insertar.setString(1,txtIc.getText());
                insertar.setString(2,txtNc.getText());
                insertar.setString(3,(String)region.getSelectedItem());//combobox                
                insertar.executeUpdate();

                con.close();         
            }
            catch (Exception x)
            {
                    x.printStackTrace();
            }
            finally
            {
                    if (rs != null) try { rs.close(); } catch(Exception x) {}
                    if (insertar != null) try { insertar.close(); } catch(Exception x) {}
                    if (con != null) try { con.close(); } catch(Exception x) {}
            }

procedimiento en el sql server 2005

Código:
CREATE PROCEDURE insertarCiudad
@id_ciudad varchar(5),
@nombre_ciudad varchar(20),
@nombre_region varchar(20)
as
declare @id_region varchar(5)
SELECT @id_region = id_region from region where nombre_region=@nombre_region
INSERT into ciudad (id_ciudad,nombre_ciudad,id_region)
values (@id_ciudad,@nombre_ciudad,@id_region)

EXECUTE insertarCiudad

Etiquetas: procedures, sql, sqlserver2005
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:19.