Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Sqlite...errore

  1. #1
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515

    Sqlite...errore

    ho duplicato un mio progettino inserendo la connessione a sqlite...

    funziona tutto alla grande....tranne ad una parte....

    ma quando inserisco in dati mi esce questo errore:

    cannot commit transaction - SQL statements in progress

    dove sbaglio???

    questo è il cod:

    codice:
    buttonPlaylist.addActionListener(new ActionListener() {				
    public void actionPerformed(ActionEvent evt) {	
    try {
    Class.forName("org.sqlite.JDBC");
    }
    catch (Exception exc) {
    System.out.println("Errore - Driver jdbc non presente: "+ exc.getMessage());
    }
    try {				
    int[] selezione = listEdit.getSelectedIndices();					
    conn = DriverManager.getConnection("jdbc:sqlite:C:\\db\\basi.sqlite");					
    for (int i=0; i<selezione.length; i++) {						
    QueryEdit edit = (QueryEdit)listEdit.getModel().getElementAt(selezione[i]);						
    pstmt = (PreparedStatement) conn.prepareStatement("SELECT * FROM datasong where id="+edit.idNum2);
    rs = pstmt.executeQuery();
    while (rs.next()) {						
    String nome = rs.getString("nome");
    String base = rs.getString("base");
    String testo = rs.getString("testo");
    String lista = (String) comboEdit.getSelectedItem();							
    pstmt = (PreparedStatement) conn.prepareStatement("insert into playlist (nome, base, testo, lista) values(?,?,?,?)");							
    pstmt.setString(1, nome);
    pstmt.setString(2, base);
    pstmt.setString(3, testo);
    pstmt.setString(4, lista);						
    pstmt.execute();
    }
    						
    }
    pstmt.close(); 
    conn.close(); 
    }catch (Exception exc) {
    System.out.println("Errore: "+ exc.getMessage());
    }
    JOptionPane.showMessageDialog(null, "Playlist "+comboEdit.getSelectedItem()+" Create!", "Messaggio...",JOptionPane.INFORMATION_MESSAGE );
    }
    });
    help!!!! non capisco!!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il problema dovrebbe essere causato dai cicli iterativi.

    Ma quando programmi non indenti mai il codice?

  3. #3
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ho inteso il problema!!!!

    i cicli iterativi devo farli perchè faccio una multiselezione!!!!

    quello che non capisco è che nel mysql non ci sono problemi nel sqlite c'è questo problema!!!

  4. #4
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    nessuno mi può aiutare???

  5. #5
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    chi mi aiuta???

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Credo sia un problema di commit.
    O effettui il commit manualmente dopo ogni esecuzione della query

    codice:
    ...
    pstmt.execute();
    con.commit();
    oppure, più semplicemente, imposti l'auto-commit sulla connessione

    codice:
    con = DriverManager.getConnection( ... );
    con.setAutoCommit( true );
    Prova.

    PS: Considera anche l'uso dei batchUpdate.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515


    già fatto!!!!


    niente!!!!

    sempre questo errore:

    Errore: cannot commit transaction - SQL statements in progress

    uffa!!!! stò impazzendo!!!!

  8. #8
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ...la cosa strana è che con mysql funziona benissimo!!!!!

  9. #9
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ooolllèèè!!!!!

    era il commit!!!!!!


    ma su false...cioè:

    conn.setAutoCommit( false );

    grazie mille!!!! davvero!!!!!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, documentandomi su questo tipo di errore, specificatamente a SQLite, ho scoperto che non puoi fare quello che stai facendo. Credo sia una limitazione propria di SQLite (io non l'ho mai usato). Tu hai una query di selezione e, mentre scorri il resultset, tenti di effettuare altre query. Ma queste non le puoi fare perchè ce n'è già una in corso (la SELECT che ti ha restituito il ResultSet).

    Secondo me puoi provare ad approcciare il batchUpdate:

    codice:
    ResultSet rs = stmt.executeQuery()   // Esegui la SELECT
    PreparedStatement pstmt = ...   // Crei la P-Statement per fare l'INSERT
    while( rs.next() ) {
       ... // Popola i campi della P-Statement
    
       // Alla fine, NON FARE l'execute, ma
       pstmt.addBatch();
    }
    
    // Alla fine, quando hai scorso tutto il resultset chiudilo
    rs.close();
    stmt.close();
    
    // E solo ora fai l'execute
    pstmt.executeUpdate();
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.