Newsgroup: it.comp.java
Titolo: Inserimento di dati quando i campi nel DB sono settati ad Auto Increment





Salve a tutti , ho creato una classe java che mi 
deve inserire nel db dei valori.


Ora noto che nel mio DB il campo id è chiave 
primaria ed è settato come Auto Increment.


Come posso fare per risolvere il problema ?? cosa 
devo modificare nella ma classe java??


Questa è la mia classe java :


 


import java.sql.Connection;


import 
java.sql.DriverManager;


import 
java.sql.PreparedStatement;


 


public class InserisciSala 
{


 


/**


* @param args


*/


public static void main(String[] args) 
{


Connection con = null;


try {


Class.forName("com.mysql.jdbc.Driver");


con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbgestionecinema","root","root");


con.setAutoCommit(false);


}


catch(Exception e){


System.out.println("Errore nella 
connesisone");


}


 


String id="2";


String codice="abc";


String PostiDisp="5";


String Cod_Cinema="081";


String 
cf="1234567896541236";


try 


    {


PreparedStatement st 
=con.prepareStatement("insert into salavalues(?,?,?,?,?)");


st.setString(1,id);


st.setString(2,codice);


st.setString(3,PostiDisp);


st.setString(4,Cod_Cinema);


st.setString(5,cf);


 


st.executeUpdate();


 


con.commit(); 


System.out.println("Inserimento 
effettuato con successo");


        }


 


catch(Exception e){


 


System.out.println("Errore nello 
statement");


     }


  }


}


 


/////////////////////////////////////////


 


tabella nel db:


 


CREATE TABLE `sala` (
  `ID` int(11) NOT 
NULL auto_increment,
  `Codice` char(3) NOT NULL,
  
`Posti_disponibili` decimal(4,0) default NULL,
  `Codice_cinema` char(3) 
NOT NULL,
  `Cf` char(16) default NULL,
  PRIMARY KEY  
(`Codice`),
  UNIQUE KEY `ID` (`ID`),
  KEY `Sala_ibfk_1` 
(`Codice_cinema`),
  KEY `Sala_ibfk_2` (`Cf`)
) ENGINE=InnoDB DEFAULT 
CHARSET=latin1;



 Questa è la mia classe java :
La prossima volta per piacere posta codice indentato: è difficile 
leggere codice scritto così.
-- 
Andrea Francia
http://www.andreafrancia.it/

 st.setString(4,cf);
Avevo gia provato con questa soluzione , ma comunque mi da errore e mi 
lancia l eccezzione "Errore nello statement" .
é come se il Db non facesse l auto increment  dell Id.
Non che che esite un altro metodo??? 

 "Errore nello statement".
Posta il testo reale dell'eccezione, non ti si puo' aiutare se non ci 
dici esattamente che errore da.
Hai già provato a usare lo stesso statement usando il client MySQL?
In effetti la sintassi della tua query mi sembra sbagliata
   insert into salavalues(?,?,?,?,?)
il values non ci vuole e poi non c'e' uno spazio tra sala e values.


 il values non ci vuole e poi non c'e' uno spazio tra sala e values.
il codice della classe è questo:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class InserisciSala {
public static void main(String[] args) {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbgestionecinema","root","root");
con.setAutoCommit(false);
}
catch(Exception e){
System.out.println("Errore nella connessione");
}
//String id="2";  questo è un commento
String codice="abc";
String PostiDisp="56";
String Cod_Cinema="071";
String cf="1234567891441236";
try
        {
PreparedStatement st =con.prepareStatement("insert into 
sala(Codice,Posti_disponibili,Codice_cinema,Cf) values(?,?,?,?)");
//st.setString(1,id); questo è un commento
st.setString(2,codice);
st.setString(3,PostiDisp);
st.setString(4,Cod_Cinema);
st.setString(5,cf);
st.executeUpdate();
con.commit();
System.out.println("Inserimento effettuato con successo");
   }
catch(Exception e)
{
System.out.println("Errore nello statement");
     }
 }
}
L eccezzione generata è quella del catch Errore nello statement". 

 L eccezzione generata è quella del catch Errore nello statement".
Gia' ma una volta che la hai catchata non sappiamo piu' nulla :-)))
e fra un po' il buon Francia ci rinuncia :-)
Devi mettere dopo il systemout un
e.printStackTrace()
e postarci tutto lo stackone
o almeno un System.out.println( e.getMessage() );
e postare il messaggio
ciauz
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


 il codice della classe è questo:
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.Statement;
 public class InserisciSala {
 public static void main(String[] args) {
 Connection con = null;
 try {
 Class.forName("com.mysql.jdbc.Driver");
 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbgestionecinema","root","root"); con.setAutoCommit(false); } catch(Exception e){ System.out.println("Errore nella connessione"); } //String id="2";  questo è un commentoString codice="abc"; String PostiDisp="56"; String Cod_Cinema="071"; String cf="1234567891441236"; try        { PreparedStatement st =con.prepareStatement("insert into sala(Codice,Posti_disponibili,Codice_cinema,Cf) values(?,?,?,?)"); //st.setString(1,id); questo è un commento st.setString(1,codice); st.setString(2,PostiDisp); st.setString(3,Cod_Cinema); st.setString(4,cf); st.executeUpdate(); con.commit(); System.out.println("Inserimento effettuato con successo");   } catch(Exception e) { System.out.println("Errore nello statement");     } }} L eccezzione generata è quella del catch Errore nello statement".

 L eccezzione generata č quella del catch Errore nello statement". 
Cosě nascondi tutte informazione sull'eccezione.
Puoi fare in due modi:
1)
dentro il catch scrivi
e.printStackTrace();
e posta il messaggio stampato sullo standard output.
2)
togli il try/catch e metti trows Exception nella dichiarazione di main main.
Se intendassi il codice sarebbe piu' facile da leggere.


 
Ahhhh, adesso è tutto piu' chiaro!!


Ragazzi scusate il casino che sto creando .
Ho visto nel messaggio di errore dopo l aggiunta
del codice   e.printStackTrace()
che non potevo inserire un altro valore in "Codice" uguale al precedente 
inserito.
Problema risolto.
Grazie Sg.Francia e n.n

 st.setString(5,cf);
Beccato! Non hai cambiato le posizioni dei parametri dello statement.
Io di solito uso una variabile di tipo int e la incremento ad ogni
utilizzo, così sopravvivo meglio alle modifiche "al volo":
int i = 0;
//st.setString(i++, id); questo è un commento
st.setString(i++, codice);
st.setString(i++, PostiDisp);
st.setString(i++, Cod_Cinema);
st.setString(i++, cf);
--
www.megadix.it

 st.setString(5,cf);
Beccato! Non hai cambiato le posizioni dei parametri dello statement.
Io di solito uso una variabile di tipo int e la incremento ad ogni
utilizzo, cosě sopravvivo meglio alle modifiche "al volo":
int i = 0;
//st.setString(i++, id); questo č un commento
st.setString(i++, codice);
st.setString(i++, PostiDisp);
st.setString(i++, Cod_Cinema);
st.setString(i++, cf);
Grazier per il suggerimento, ma l errore non era questo,
ovvero lo avevo corretto dopo aver postato il codice sul newsgroup.
Il problema era che non potevo inserire un valore due volte in quanto il 
campo
era chiave.

 
Ehm...
Se parti da i=0 bisognerebbe scrivere ++i
Comunque il concetto e' chiaro.


Gasp! Che figura... hai ragione, bisogna partire da 1. Sai, per la
fretta ho scritto la prima cosa che sembrava sensata. La correzzzzione
quindi è:
int i = 0;
//st.setString(++i, id); questo è un commento
st.setString(++i, codice);
st.setString(++i, PostiDisp);
st.setString(++i, Cod_Cinema);
st.setString(++i, cf);
così alla fine hai pure l'ultimo indice utilizzato.
E' talmente una minchiata questa degli indici che partono da uno SOLO
per JDBC che ogni volta devo farci su una risata...
Ciao ciao
--
www.megadix.it