PDA

Visualizza la versione completa : [JAVA] ExecuteQuery


magnus
25-04-2004, 12:17
Ciao ragazzi!
Ho realizzato questa funzione:

public void executeSQLQuery(String sql){
try{
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e)
{
System.out.println(e.getLocalizedMessage());
}
}

Che richiamo così:

executeSQLQuery("insert into clienti (codice) values ('" +
Codice.getText() + "')");

Il problema e che vorrei che mi restituisse un codice di errore preciso!

Come fare?

Ciao! :ciauz:

magnus
25-04-2004, 12:18
Che argomento dovrebbe avere in uscita?( vorrei avere in uscita il codice univoco dell'errore )
In effetti quando eseguo una insert mi da un errore e non dovrebbe ( poicheè nessun rigo viene restituito dal db )

come fare per evitare ciò?

V1RuZ
25-04-2004, 12:47
Devi catturare l'eccezione SQLException

magnus
25-04-2004, 13:14
Ok, fatto.
Però se faccio una insert mi restituisce 0.
Ma anche se tento di duplicare la chiave primaria mi da zero!

Come faccio a distinguere i due tipi di errori?

Codice:
public int executeSQLQuery(String sql){
try{
Statement stmt = conn.createStatement();
rs=stmt.executeQuery(sql);
return 0;
}
catch(SQLException e)
{
System.out.println(e.getMessage() + " - " + e.getErrorCode());
return e.getErrorCode();
}
}

munshun
26-04-2004, 21:03
Ciao,

nel metodo che richiami, non usare executeQuery() ma usa execute() (è più sicuro e ti ritorna un intero se non sbaglio). Se devi fare altre operazioni usa executeUpdate() (anche per la delete). Il metodo executeQuery in alcuni casi si comporta in modo strano.

:metallica

:ciauz:

V1RuZ
26-04-2004, 21:41
Il metodo executeQuery serve solo per operazioni non di scrittura sul db. Per tutte le operazioni che modificano il db si usa executeUpdate()

magnus
26-04-2004, 22:41
Come vi sembrano come soluzioni?

/*-----------------------------------------------------------
Query che non restituisce risultati
-----------------------------------------------------------*/
public int executeQuery(String sql){
try{
Statement stmt = conn.createStatement();
stmt.execute(sql);
return 0;
}
catch(SQLException e)
{
System.out.println("-------------------------------");
System.out.println("Messaggio: " + e.getMessage());
System.out.println("Codice Errore: " + e.getErrorCode());
System.out.println("Stato SQL: " + e.getSQLState());
System.out.println("-------------------------------");
if (e.getErrorCode()==-3702){
JOptionPane.showMessageDialog(this,
"Non sono stati compilati correttamente i campi!!\n" +
e.getMessage());
return 1;
};
if (e.getErrorCode()==0){
JOptionPane.showMessageDialog(this,
"Duplicazione di una chiave primaria!!\n" +
e.getMessage());
return 1;
};
JOptionPane.showMessageDialog(this, "Si è verificato un errore!\nControllare il log da console.");
return 1;
}
}
/*-----------------------------------------------------------
Query che restituisce risultati
-----------------------------------------------------------*/
public ResultSetMetaData ResultQuery(String sql){
ResultSetMetaData metaData;
try{
Statement stmt = conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
metaData=rs.getMetaData();
return metaData;
}
catch(SQLException e){
return null;
}
}

magnus
26-04-2004, 22:46
Putroppo però così mi riene restituita un'eccezione:

ResultSetMetaData metaData = ResultQuery(sql);

Ma come cavolo posso creare una funzione che mi restituisca il risultato di una interrogazione??????

:(

magnus
27-04-2004, 00:16
Ho provato questa funzione....
Non funziona!!!!!!!!
Eppure come num mi stampa 1!

public void aggiorna(String sql){
try{
Statement stmt = conn.createStatement();
int num=stmt.executeUpdate(sql);
System.out.println(num);
}catch(Exception e){System.out.println(e);}
}

Cosa sbaglio???????? :( :( :(

La richiamo così:
test.aggiorna("insert into clienti (codice) values ('5')");

pippo75
27-04-2004, 09:04
E' giusta: num restituisce il numero di record aggiornati!
inserisci un record, quindi è giusto che ti ritorni 1 ...

Loading