Newsgroup: it.comp.java
Titolo: database

ragazzi secondo voi perchè il codice riportato non mi aggiorna la tab
dipendente del database?grazie
import java.sql.*;
public class BasicConnection {
    /** Creates a new instance of BasicConnection */
    public BasicConnection() {
        Connection myConnection=null;
        Statement myStatement=null;
        try{
          DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
myConnection=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE",
                  "hr","hrmanager");
          String nome="mario";
          String cognome="rossi";
          String qualifica="ing";
          myStatement=myConnection.createStatement();
          myStatement.executeUpdate("insert into dipendente" +
                  "values" +
                  "("+10+",'"+nome+"', '"+cognome+"','"+qualifica+"')"
                  );
        }catch(SQLException e){
           String m= e.getMessage();
        }
    }
    public static void main(String[]args){
        BasicConnection b=new BasicConnection();
    }
}

 dipendente del database?grazie
mi sembra che in codesto codice tu faccia di tutto per nascondere non
solo a noi, ma anche a te stesso, l'eventuale errore che si genera. Non
è una gran tecnica di debug.
Qualora non ci fosse errore, può darsi che manchi semplicemente la
commit.

Come già detto da emmesse, la soluzione è qui:
 >            String m= e.getMessage();
fai un bel System.err.println(m); e dovresti avere qualche chiarimento.
 >           myStatement.executeUpdate("insert into dipendente" +
 >                   "values" +
 >                   "("+10+",'"+nome+"', '"+cognome+"','"+qualifica+"')"
 >                   );
così, a occhio, manca l'elenco delle colonne, oppure lo spazio tra 
"dipendente" e "values" e formalmente il ";" alla fine della query.
Alex.

 writes:
APB> cosě, a occhio, manca l'elenco delle colonne, oppure lo spazio
APB> tra "dipendente" e "values" e formalmente il ";" alla fine della
APB> query.
Ho trovato  vari DB in cui,  se fornisci valori per  tutte le colonne,
non č necessario fornire l'elenco delle colonne. Sono pienamente d'accordo
che la mancanza dello spazio tra "dipendente" e "values" possa essere la
fonte dei guai.
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software

 \/                 e coltivatore diretto di Software
grazie per l'aiuto. In effetti la mancanza di spazio tra dipendente e
values era la causa di tutto. Certo che usando Java la sintassi sql è
un po pesantuccia. Spazi, apici, doppi e singoli. esiste un modo per
evitare quaeti problemi?

 evitare quaeti problemi?
Prova a guardare java.sql.PreparedStatement.
Alex.

 non è necessario fornire l'elenco delle colonne. 
Se non erro è previsto dallo standard SQL.
Ciò non toglie che equivalga a giocare col fuoco, specie se un giorno 
decidi di fare un bel ALTER TABLE :-)
Alex.

 non è necessario fornire l'elenco delle colonne.
E' standard, ma IMHO deprecabile perchè poco leggibile e estremamente
error-prone.

> non è necessario fornire l'elenco delle colonne.
emmeesse> E' standard, ma IMHO deprecabile perchè poco leggibile e
emmeesse> estremamente error-prone.
E' comodo  quando dai una query  in maniera interattiva  :). Credo che
SQL sia nato prima come linguaggio  da usare in modo interattivo e poi
sia diventato "embedded"...
Sul poco  leggibile non sono d'accordo  (perché se si va  a mettere le
mani  in un  database che  non conosci  bene si  è di  gran  lunga più
deprecabili,  se si  conosce il  database  la non  leggibilità non  la
vedo), sono invece  d'accordo con APB sulle possibili  ALTER TABLE che
possono  colpire il  DB durante  la vita  dell'applicazione,  anche se
queste devono  essere "pianificate" e  progettate bene per  non creare
sconquassi :)


 vedo),
Scusa, ma te per "conoscere il database" intendi impararlo a memoria?
:-)
Scrivendo in questo modo ti esponi all'errore di inserire le colonne
nell'ordine sbagliato, sui dati vengono scritti fischi per fiaschi e
poi vallo a capire che dipende proprio da quello...

 Prova a guardare java.sql.PreparedStatement.
A parte quello, direi che usare un Exception.printStackTrace() invece di
un redirezionamento dell'errore in una variabile _mai_ letta sia molto
piu` proficuo
Enrico

> vedo),
emmeesse> Scusa, ma te per "conoscere il database" intendi impararlo a
emmeesse> memoria?  :-) 
Sapere come e` fatto, certamente.
emmeesse> Scrivendo in questo modo ti esponi all'errore
emmeesse> di inserire le colonne nell'ordine sbagliato
Lì il problema potrebbe essere stato fatto a monte...
Comunque parlavo di "leggibilità". Se SAI come è fatto il DB allora la
query la leggi.
Se poi per un qualche motivo ti trovi una tabella con 80 colonne e non
hai scritto la  query (in un sorgente, non  in interattivo[*]) senza i
nomi delle colonne... Dimmi, perché aneli a morire :) :) :) ?
(tu generico, non riferito a emmeesse)


 Sapere come e` fatto, certamente.
Ripeto e chiarisco: imparare a memoria fino all'ordine con cui sono
disposte le colonne nelle tabelle, è questo ciò che tu intendi per
"conoscere il database"?

> Sapere come e` fatto, certamente.
e> Ripeto e chiarisco: imparare a memoria fino all'ordine con cui sono
e> disposte le colonne nelle tabelle, č questo ciň che tu intendi per
e> "conoscere il database"?
Si, o per lo meno avere il reference sotto mano :)
Come ho  gia` detto, fintanto  che le tabelle rimangono  di dimensioni
(come colonne) umane la cosa e`  vera. Quando ti danno una tabella che
ha piů  colonne di quanti binari  abbiano tutte le  stazioni di Milano
messe  insieme (anche  senza scomodare  LeNORD :)  ) cominci  ad avere
tanta ragione. 
