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

    Autoincremento attributo e nei PreparedStatement

    Ciao a tutti, sto lavorando su Netbeans usando il database Driver Derby JDBC. Non riesco a creare una tabella in cui settare un attributo NUMERO con autoincremento, errore di sintassi, non capisco come vada scritto. In sostanza č la tabella contenente delle prenotazioni.

    codice:
     
    st.executeUpdate("CREATE TABLE TABELLA_PRENOTAZIONI" + "(ID VARCHAR(30), " + " NOME VARCHAR(30) NOT NULL, " +
     " COGNOME VARCHAR(30) NOT NULL, "+
    "LISTA VARCHAR(60),"+"DATA VARCHAR(8),"+
    "ORA VARCHAR(5),"+"NUMERO INT NOT NULL AUTO_INCREMENT,"+
    "CONSEGNATA VARCHAR(2),"+"PRIMARY KEY(ID,DATA))");
    Inoltre, se il valore si autoincrementa, se dņ la possibilitą ad un utente di inserire una prenotazione da form, come faccio con i preparedstatement ad inserire il valore con autoincremento?

    codice:
     public void addPrenotazione(String id,String nome, String cognome,
                  String lista, String data, String ora, String consegnata){
             
            try{ 
               DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
               Connection conn = DriverManager.getConnection(url, user, pwd);
             
              String sql = "INSERT INTO TABELLA_PRENOTAZIONI VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
                PreparedStatement prepStat = conn.prepareStatement(sql);
                prepStat.setString(1, id);
                prepStat.setString(2, nome);
                prepStat.setString(3, cognome);
                prepStat.setString(4, lista);
                prepStat.setString(5, data);
                prepStat.setString(6, ora);
                prepStat.setInt(7, );             //COSA INSERIRE COME SECONDO PARAMETRO???
                prepStat.setString(8, "NO");
             
                prepStat.executeUpdate();
        
                prepStat.close();
                conn.close();
         
         
         }
          catch(SQLException e){System.out.println(e.getMessage());}
            
         }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se il campo č auto incrementante non dovrebbe essere necessario scrivere nulla. Prova a toglierlo dalla query, dovrebbe pensarsi il dbms. Anche se č un po' che non uso Derby, non ricordo bene...

    Ah, nel catch stampa almeno lo stack trace dell'exception: in caso di problemi sarą pił utile di un semplice "SQLException"
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    A quale query ti riferisci? Quella per creare o per inserire? Perchč gią al momento della creazione il parametro AUTO_INCREMENT non piace...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Darčios89 Visualizza il messaggio
    Non riesco a creare una tabella in cui settare un attributo NUMERO con autoincremento, errore di sintassi, non capisco come vada scritto.
    Lo spiega il manuale ufficiale: Defining an Identity Column
    Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Darčios89 Visualizza il messaggio
    A quale query ti riferisci? Quella per creare o per inserire? Perchč gią al momento della creazione il parametro AUTO_INCREMENT non piace...
    Scusa, avevo capito male, pensavo non sapessi come preparare lo statement... ^^'
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Perņ il problema permane negli inserimenti con i preparedstatement, ho questo codice:

    codice:
     public void addPrenotazione(String id,String nome, String cognome,              String lista, String data, String ora, String consegnata){
             
            try{ 
               DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
               Connection conn = DriverManager.getConnection(url, user, pwd);
             
              String sql = "INSERT INTO TABELLA_PRENOTAZIONI VALUES (?, ?, ?, ?, ?, ?, ?)";
                PreparedStatement prepStat = conn.prepareStatement(sql);
                prepStat.setString(1, id);
                prepStat.setString(2, nome);
                prepStat.setString(3, cognome);
                prepStat.setString(4, lista);
                prepStat.setString(5, data);
                prepStat.setString(6, ora);
                prepStat.setString(8, consegnata);
             
                prepStat.executeUpdate();
        
                prepStat.close();
                conn.close();
         
         
         }
          catch(SQLException e){System.out.println(e.getMessage());}
            
         }
    In cui ho saltato il parametro relativo all'attributo che si autoincrementa, ma non viene creata alcuna voce nel database...
    Ultima modifica di Darčios89; 17-01-2014 a 19:20

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Darčios89 Visualizza il messaggio
    codice:
    String sql = "INSERT INTO TABELLA_PRENOTAZIONI VALUES (?, ?, ?, ?, ?, ?, ?)";
    
                prepStat.setString(8, consegnata);
    Se ci sono 7 '?' .... l'indice 8 non ci sta ....

    E comunque se in una insert non metti tutti i campi, ne salti alcuni o non li metti nell'ordine di dichiarazione nella tabella, allora dovresti elencare nell'insert i nomi delle colonne.
    Ultima modifica di andbin; 17-01-2014 a 22:13
    Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet

  8. #8
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se ci sono 7 '?' .... l'indice 8 non ci sta ....

    E comunque se in una insert non metti tutti i campi, ne salti alcuni o non li metti nell'ordine di dichiarazione nella tabella, allora dovresti elencare nell'insert i nomi delle colonne.
    Dunque, ho controllato il database e la struttura č questa:

    codice:
    ID NOME COGNOME LISTA DATA ORA TOTALE CONSEGNATA NUMERO
    Dove numero č un campo che ho definito incrementale come nella guida che andbin mi ha linkato, quindi con questa istruzione e non ci sono stati errori:

    codice:
      st.executeUpdate("CREATE TABLE TABELLA_PRENOTAZIONI" + "(ID VARCHAR(30), " + " NOME VARCHAR(30) NOT NULL, " +" COGNOME VARCHAR(30) NOT NULL, "+"LISTA VARCHAR(60),"+"DATA VARCHAR(8),"+"ORA VARCHAR(5),"+"TOTALE DOUBLE,"+"CONSEGNATA VARCHAR(2),"+"NUMERO INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "+"PRIMARY KEY(ID,DATA))");
    Per inserire una prenotazione di una pizza nel database c' č questo metodo dove non ho inserito il parametro NUMERO visto che č incrementale, quindi:

    codice:
    public void addPrenotazione(String id,String nome, String cognome,              String lista, String data, String ora, String consegnata){
             
            try{ 
               DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
               Connection conn = DriverManager.getConnection(url, user, pwd);
               
               double totale=0;
               StringTokenizer str=new StringTokenizer(lista,", ");
               
                while (str.hasMoreTokens()) {
                    totale+=totale+getPrezzo(str.nextToken());
                }
                
             
              String sql = "INSERT INTO TABELLA_PRENOTAZIONI VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
                PreparedStatement prepStat = conn.prepareStatement(sql);
                prepStat.setString(1, id);
                prepStat.setString(2, nome);
                prepStat.setString(3, cognome);
                prepStat.setString(4, lista);
                prepStat.setString(5, data);
                prepStat.setString(6, ora);
                prepStat.setDouble(7, totale);
                prepStat.setString(8, consegnata);
                
                
             
                prepStat.executeUpdate();
        
                prepStat.close();
                conn.close();
         
         
         }
          catch(SQLException e){System.out.println(e.getMessage());}
            
         }
    Perņ non funziona...

  9. #9
    Qualcuno saprebbe aiutarmi su quest'ultima cosa?

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.