Newsgroup: it.comp.java
Titolo: errore in una query di inserimento (semplicissima)

Chi puň dirmi quale potrebbe essere l'errore che si verifica durante
l'esecuzione?
Grazie 1000 davvero!
import java.sql.*;
public class PrimoSql {
  Connection con;
  public PrimoSql() {
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
       String url = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\db1.mdb";
       Connection con = DriverManager.getConnection(url);
       System.out.println("Connessione OK");
    }
    catch (Exception e) {
      System.out.println("Connessione Fallita");
      e.printStackTrace();
      System.exit(1);
    }
  }
  private void addNome(){
    try {
      Statement st = con.createStatement();
      String sql= "INSERT INTO ANAG (Cognome, Nome) VALUES
('Rossi','Mario')";
      st.executeUpdate(sql);
    }
    catch (Exception e) {
      System.out.println("Errore nell'inserimento");
      e.printStackTrace();
      System.exit(1);
    }
  }
  public static void main(String argv[]) {
    PrimoSql a = new PrimoSql();
    a.addNome();
  }
}

 Grazie 1000 davvero!
[CUT]
che errore ottieni?
Inviato da 
www.mynewsgate.net

...

Forse perchč dovresti inserire i valori in questo modo:
('"+Rossi+"', '"+Mario+"')
prova un po' cosě

 prova un po' cosě
In questo modo  Rossi e Mario sono due variabili.
Non penso sia questo il problema.
Louis com' č  fatta la tua tabella? Quali sono le chiavi primarie?
Quale errore ricevi in output?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:68405dd797ea463b0ed...@mygate.mailgate.org...


>       st.executeUpdate(sql);
Prova : 
st.execute(sql);


 ha scritto nel messaggio
news:da2788bf3fc4aac9e11...@mygate.mailgate.org...


     at PrimoSql.main(PrimoSql.java:42)
Intanto un consiglio: scrivi il tuo testo al di sotto di quello precedente.
Cosa c'è a riga 27? Dal messaggio potrebbe essere non chiaro.
Cmq ti consiglio di gestire un po' meglio le eccezioni.
I metodi dovrebbero ributtare l'eccezione a livello superiore. Dichiara che il
costruttore e addNome buttano eccezione e leva i try catch. O proprio al
limite lasciali, ma nel catch ributtala a chi la ha chiamata e da li gestiscila.
Tanto per...ma la connessione non la chiudi mai?
 
Inviato da 
www.mynewsgate.net

Rimando il codice:
import java.sql.*;
public class PrimoSql {
  Connection con;
  public PrimoSql() {
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
       String url = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\db1.mdb";
       Connection con = DriverManager.getConnection(url);
       System.out.println("Connessione OK");
    }
    catch (Exception e) {
      System.out.println("Connessione Fallita");
      e.printStackTrace();
      System.exit(1);
    }
  }
  private void addNome(){
    try {
      Statement st =
con.createStatement();<-------------------------------------riga 27
      String sql= "INSERT INTO ANAG (Cognome, Nome) VALUES
('Rossi','Mario')";
      st.executeUpdate(sql);
    }
    catch (Exception e) {
      System.out.println("Errore nell'inserimento");
      e.printStackTrace();
      System.exit(1);
    }
  }
  public static void main(String argv[]) {
    PrimoSql a = new PrimoSql();
a.addNome();<-------------------------------------------------------------ri
ga 42
  }
}
infatti la chiusura manca, ora la metto.
Grazie per la disponibilità!!!
"gnazio" <8...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:20040127...@mynewsgate.net...


 Cosa c'č a riga 27? Dal messaggio potrebbe essere non chiaro.


 Grazie per la disponibilità!!!
Riguardando meno distrattamente il codice ho capito dove è il problema.
Tu ottieni la connessione dal DriverManager e non l'assegni alla variabile
d'istanza 'Connection con', ma la assegni alla variabile 'Connection con' che
dichiari dentro il costruttore! Quindi nel metodo addNome la variabile d'istanza
'con' punterà a null in quanto mai inizializzata, generando così una
NullPointerException appenda provi ad invocarne un metodo.
Inviato da 
www.mynewsgate.net

Grazie ancora per la pazienza, per me è la prima volta che realizzo una
query di inserimento in java (lavoro abitualmente in vb).
Ora ho corretto in questo modo, e in effetti non c'è nessuna eccezione, ma
comunque se vado a vedere il db, l'inserimento non si realizza, non c'è
niente dentro.
Il tutto senza errori di sorta, non credevo fosse possibile.
L'output è il seguente:
Connessione OK
Process PrimoSql terminated.
Allego il codice:
import java.sql.*;
public class PrimoSql {
  Connection con;  //Qui la dichiaro
<----------------------------------------------
  public PrimoSql() {
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
       String url = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\Documents and Settings\\Luigi\\Desktop\\Da
destinare\\Andrea sql\\db1.mdb";
       con = DriverManager.getConnection(url);
//<------------------------qui la assegno--è corretto così?
       System.out.println("Connessione OK");
    }
    catch (Exception e) {
      System.out.println("Connessione Fallita");
      e.printStackTrace();
      System.exit(1);
    }
  }
  private void addNome(){
    try {
      Statement st = con.createStatement();
      String sql= "INSERT INTO ANAG (Cognome, Nome) VALUES
('Rossi','Mario')";
      st.execute(sql);
    }
    catch (Exception e) {
      System.out.println("Errore nell'inserimento");
      e.printStackTrace();
      System.exit(1);
    }
  }
  public static void main(String argv[]) {
    PrimoSql a = new PrimoSql();
    a.addNome();
  }
}
La chiusura manca ancora! Ora la metto
Grazie 1000!
"gnazio" <8...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:20040128...@mynewsgate.net...


 Il tutto senza errori di sorta, non credevo fosse possibile.
[CUT]
Proprio perchè stai iniziando tieni *sempre* aperta la documentazione delle API.
(dopo anni è ancora il primo bookmark del mio browser e quando programmo è
sempre aperta).
Tra l'altro avresti letto a cosa serve il metodo execute(String sql)...
per le insert e update si usa invece
st.executeUpdate(sql).
Oltretutto questi metodi ritornano un valore che così viene sparato
nell'iperspazio. In questo caso, se la insert va a buon fine sarà sicuramente 1
(int). Potresti usarlo per un messaggio o per conoscere l'esito dell'operazione
e decidere sul da farsi (forse + in caso di update che di insert).
Comunque ti ribadisco di gestire meglio le eccezioni!
Pensa se un'altra classe dovesse utilizzare questa: se al momento in cui viene
istanziata qualcosa dovesse andare storto si chiuderebbe tutta l'applicazione!
Inviato da 
www.mynewsgate.net

 st.executeUpdate(sql).
Dimeticavo le delete!
Inviato da 
www.mynewsgate.net

Si, ho provato ma nulla, con i = executeUpdate(sql);
nessun errore ma il record nuovo non c'č nel db.
Il metodo in effetti mi ritorna 1, eppure non funziona.
Ho provato ha fare prima una query di selezione e funziona perfettamente,
poi quella di inserimento ma quella niente...
Mi indicheresti in rete degli esempi in modo che io possa fare un
copia-incolla e vedere funzionare i vari esempi di query?
Le query di selezione funzionano, ma quelle di inserimento no
"gnazio" <8...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:20040129...@mynewsgate.net...


 Chi può dirmi quale potrebbe essere l'errore che si verifica durante
