Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [java]+[sql] problema con delete

    host.xzshare.com/?d=AE56CCB91

    Vi ho linkato la classe java(non l'ho postata qua direttamente perchè è piuttosto lunga) in cui ho il seguente problema riportato in immagine:


    l'applicazione gestisce playlist di mp3 presenti sul pc.
    Voglio dare la possibilità di aggiungere alla playlist canzoni uguali perchè potrei volerle ascoltare più volte.
    Dal pannello "VISTA AD ALBERO" vado a selezionare la o le directory musicali presenti sul mio pc. Se una stessa canzone appartiene a directory diverse non ho nessun problema perchè in fase di inserimento nel database, la canzone viene riconosciuta proveniente da diverse root e quindi le viene assegnato un KEY_MP3 diverso.

    Invece se una stessa canzone proviene dalla stessa directory le viene assegnato lo stesso KEY_MP3, quindi se ad esempio inserissi erroneamente nella playlist 2canzoni uguali(faccio erroneamente un click in più) e volessi cancellarne una sola, facendo la delete me le cancella entrambe. (se ad esempio seleziono solo la canzone numero4, mi cancella anche la numero3. :-(

    Voi risolvereste il problema in fase di inserimento o cancellazione?

    Attendo preziosi consigli poichè sono in difficoltà!

    grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    per me la cosa va gestita più o meno così:

    avrai una tabella (id, titolo, percorso, altri_campi) con tutte le canzoni presenti nel computer (o quanto meno, quelle man mano selezionate dall'utente). A questa tabella andrai ad aggiungere le canzoni se non sono già state aggiunte.

    avrai una tabella playlist dove l'utente salverà i dati delle sue playlist preferite:
    (id, nome_playlist, altri_campi)

    e poi avrai la tabella che collega le playlist con le canzoni:
    (id, id_playlist, id_canzone, posizione_nella_playlist)

    In questo modo per cancellare una canzone da una determinata playlist farai:

    DELETE FROM songs_playlist WHERE id_playlist = "tuo_id_playlist_in_ascolto" AND posizione_nella_playlist = "posizone_selezionata"
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    esatto.
    ci avevo già provato. Avevo anche io pensato di effettuare una delete sulla posizione selezionata ma senza successo.

    Quando hai un pò di tempo e soprattutto se ne hai voglia, riusciresti a mettere mano al codice della classe che ho postato?

    ti ringrazio in ogni caso

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    posta solo le cose salienti (il/i metodo/i con cui fai il delete per esempio) e pure la struttura delle tabelle.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Con questo metodo elimino le righe della tabella.
    Il problema sorge quando cancello 2canzoni uguali della stessa cartella poichè gli viene assegnato lo stesso key_mp3. Avevo provato anche ad aggiungere anche la posizione selezionata da cancellare ma non mi succede niente...forse sbaglio qualcosa

    codice:
    public static void deleteFileFromPlaylist(String key_mp3, String key_playlist) throws SQLException {
        	
        	stat.executeUpdate("DELETE FROM PLAYLIST_MP3 where key_mp3=" + key_mp3 + " AND key_playlist=" + key_playlist);
        }
    Altre procedure salienti sono:

    codice:
    public static Vector<Vector<String>> getPlaylist(String key) throws SQLException {
            Vector<Vector<String>> ret = new Vector<Vector<String>>();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM PLAYLIST_MP3 JOIN MP3 ON(KEY_MP3=MP3.KEY) WHERE KEY_PLAYLIST=" + key + " ORDER BY pos");
    
            while (resultSet.next()) {
                Vector<String> vector = new Vector<String>();
                vector.addElement(resultSet.getString("name"));
                vector.addElement(resultSet.getString("key"));
                vector.addElement(resultSet.getString("path"));
                vector.addElement(resultSet.getString("artist"));
                vector.addElement(resultSet.getString("album"));
                vector.addElement(resultSet.getString("title"));
                vector.addElement(resultSet.getString("time"));
                vector.addElement((resultSet.getInt("pos") + 1) + "");
                ret.add(vector);
            }
            System.out.println("ret = " + ret);
    
            return ret;
        }
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
        public static void addFileToPlaylist(String key_mp3, String key_playlist) throws SQLException {
            ResultSet resultSet = stat.executeQuery("SELECT MAX(pos) FROM playlist_mp3 where  key_playlist=" + key_playlist);
            resultSet.next();
    
            int pos = resultSet.getInt(1) + 1;
            
            stat.executeUpdate("INSERT INTO playlist_mp3  " +
                    "values(" + key_mp3 + "," + key_playlist + "," + pos + ")");
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
        public static Vector<Vector<String>> getFiles(String key) throws SQLException {
            Vector<Vector<String>> ret = new Vector<Vector<String>>();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM MP3 WHERE PARENT=" + key + " ORDER BY LCASE(NAME)");
            while (resultSet.next()) {
                Vector<String> vector = new Vector<String>();
                vector.addElement(resultSet.getString("name"));
                vector.addElement(resultSet.getString("key"));
                vector.addElement(resultSet.getString("path"));
                vector.addElement(resultSet.getString("artist"));
                vector.addElement(resultSet.getString("album"));
                vector.addElement(resultSet.getString("title"));
                vector.addElement(resultSet.getString("time"));
                
                ret.add(vector);
            }
            System.out.println("key = " + key);
            System.out.println("resultSet = " + resultSet);
            return ret;
        }

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    riporta anche le tabelle (come sono strutturate).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    queste sono tabelle...

    codice:
    CREATE TABLE DIR(KEY INTEGER NOT NULL,NAME VARCHAR(200),PATH VARCHAR(200) NOT NULL PRIMARY KEY,PARENT INTEGER)
    
    CREATE TABLE MP3(KEY INTEGER NOT NULL,NAME VARCHAR(200),PATH VARCHAR(200) NOT NULL PRIMARY KEY,PARENT INTEGER,ARTIST VARCHAR(200),ALBUM VARCHAR(200),TITLE VARCHAR(200),TIME VARCHAR(5),LENGTH INTEGER,SIZE INTEGER)
    
    CREATE TABLE PLAYLIST(KEY INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(200))
    
    CREATE TABLE PLAYLIST_MP3(KEY_MP3 INTEGER NOT NULL,KEY_PLAYLIST INTEGER NOT NULL,POS INTEGER)

  8. #8
    nessuno mi sa aiutare?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    farei:

    codice:
    "DELETE FROM PLAYLIST_MP3 WHERE KEY_PLAYLIST = "+key_playlist+" AND POS = "+pos_in_playlist
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.