Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    495

    Formulazione query:insert

    CIAO!

    Nel database di sql server ho la tabella Animale con i seguenti campi:
    Cod_animale(chiave),nome,Specie,Genere,Cod_gabbia

    l'inserimento lo voglio fare dall'applicazione java che si interfaccia al database:

    i campi vengono presi dal jtextField nel quale sono inseriti:

    if(PulsantePremuto==jButton6){

    String insert = new String();
    insert = jTextField2.getText();
    System.out.println(insert);

    try {
    String s,p = new String();
    Connection conn = DriverManager.getConnection("jdbcdbcrova","ELISA","");
    Statement stmt = conn.createStatement();

    //QUESTA NON FUNZIONA
    stmt.executeUpdate("INSERT INTO prova.dbo.Animale" + "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" + "VALUES ( " +insert+ ")");

    //fUNZIONA ma i valori sono immessi da programma e non da jtextfield2
    //stmt.executeUpdate("INSERT INTO prova.dbo.Animale" + "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" + "VALUES ('RA4','fisc','anfibio','rana','G1')");

    stmt.close();
    conn.close();
    }
    catch (Exception er) {er.printStackTrace();}
    }

    Come posso sistemare la insert non funzionante?
    l'errore che otteengo è il seguente:

    The name "RA4" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted

    Grazie ancora!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Ti invito ad utilizzare i tag [*CODE] e [*/CODE] (senza l'asterisco rosso) per postare il codice, così risulta più leggibile.


    Ad ogni modo, non ho capito se il codice che non funziona sia quello con i valori fissi o quello con i valori da JTextField.
    Ti posto il codice con i valori da JTextField:
    codice:
    stmt.executeUpdate(
       "INSERT INTO prova.dbo.Animale" + 
       "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" +
       "VALUES ('" +
          jtf1.getText() + "','" + 
          jtf2.getText() + "','" + 
          jtf3.getText() + "','" + 
          jtf4.getText() + "','" + 
          jtf5.getText() +
       "');"
    );
    Ovviamente jtf1 .. jtf5 sono le 5 JTextField da cui prendere i valori.

    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    495
    Scusa..però non mi funziona..
    dal tuo esempio,io che ho un unico jTextField ho scritto:

    stmt.executeUpdate(
    "INSERT INTO prova.dbo.Animale" +
    "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" +
    "VALUES ('" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +

    jTextField2.getText() +
    "');"


    e la stringa che inserisco sul jTextFied è:


    W4,fisc,anfibio,rana,G1


    è corretto?

    però l'errore è:

    String or binary data would be truncated.

    non capisco..

    grazie!

  4. #4
    Ma tu hai un unico JTextField per tutti i valori? Sarebbe opportuno avere un singolo JTextField per ogni singolo valore.

    Se per qualche motivo non puoi avere più JTextField, allora devi "costruirti" la query andando a spezzettare i vari valori:

    codice:
    String query = "INSERT INTO prova.dbo.Animale" +
                           "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" +
                           "VALUES ( ";
    String valori = jTextField2.getText();
    String[] arrayValori = valori.split (",");
    
    for (int i=0; i < arrayValori.length; i++)
                query += "'"+arrayValori[i]+"',";
    query = query.substring(0,query.length()-1);
    query += ")";
    
    stmt.executeQuery(query);
    E' cmq una soluzione poco pulita quella dell'unico JTextField in quanto dovresti avere la certezza che i valori inseriti dall'utente siano separati da una virgola.
    Al mio segnale... scatenate l'inferno!

  5. #5
    Originariamente inviato da ojalà
    Scusa..però non mi funziona..
    dal tuo esempio,io che ho un unico jTextField ho scritto:

    stmt.executeUpdate(
    "INSERT INTO prova.dbo.Animale" +
    "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" +
    "VALUES ('" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +
    jTextField2.getText() + "','" +

    jTextField2.getText() +
    "');"


    e la stringa che inserisco sul jTextFied è:


    W4,fisc,anfibio,rana,G1


    è corretto?

    però l'errore è:

    String or binary data would be truncated.

    non capisco..

    grazie!
    Innanzitutto non capisco perchè utilizzi l'executeUpdate quando devi fare una insert e non executeQuery....e poi hai provato a farti stampare la query? Da come vedo mi sembra che ci sia un errore, xkè se la stringa del JTextField è "W4,fisc,anfibio,rana,G1" la tua query verrebbe: INSERT INTO prova.dbo.Animale (Cod_animale,Nome,Specie,Genere,Cod_gabbia) VALUES ('W4,fisc,anfibio,rana,G1','W4,fisc,anfibio,rana,G 1','W4,fisc,anfibio,rana,G1','W4,fisc,anfibio,rana ,G1','W4,fisc,anfibio,rana,G1');

    Cmq fattela stampare e controlla.
    S-RDZN

    J2EE programmer

  6. #6
    Originariamente inviato da simoneRDZN
    Innanzitutto non capisco perchè utilizzi l'executeUpdate quando devi fare una insert e non executeQuery....
    Appunto... l'executeUpdate è per l'update e le insert. executeQuery è per le select.
    Al mio segnale... scatenate l'inferno!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da R@ve M@ster
    Appunto... l'executeUpdate è per l'update e le insert e le delete. executeQuery è per le select.
    Ho aggiunto la parte in grassetto..

    Update significa aggiornamento. Un aggiornamento può essere una modifica (SQL: UPDATE), una cancellazione (SQL: DELETE) o un inserimento (SQL: INSERT).


    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

  8. #8
    Vabbè, mi sono confuso (sto utilizzando un framework personalizzato, in cui sono stati riscritti un pò di metodi...), cmq se vogliamo fare i precisini, R@ve M@ster anche tu avevi usato l'executeQuery() nel tuo esempio:

    Originariamente inviato da R@ve M@ster
    Ma tu hai un unico JTextField per tutti i valori? Sarebbe opportuno avere un singolo JTextField per ogni singolo valore.

    Se per qualche motivo non puoi avere più JTextField, allora devi "costruirti" la query andando a spezzettare i vari valori:

    codice:
    String query = "INSERT INTO prova.dbo.Animale" +
                           "(Cod_animale,Nome,Specie,Genere,Cod_gabbia)" +
                           "VALUES ( ";
    String valori = jTextField2.getText();
    String[] arrayValori = valori.split (",");
    
    for (int i=0; i < arrayValori.length; i++)
                query += "'"+arrayValori[i]+"',";
    query = query.substring(0,query.length()-1);
    query += ")";
    
    stmt.executeQuery(query);
    E' cmq una soluzione poco pulita quella dell'unico JTextField in quanto dovresti avere la certezza che i valori inseriti dall'utente siano separati da una virgola.
    Cmq il problema non era quello di utilizzare l'uno o l'altro metodo.....il problema era la query....
    S-RDZN

    J2EE programmer

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.