Collegamento Mysql

di il
19 risposte

Collegamento Mysql

Buongiorno a tutti,
Volevo chiedervi un aiuto su questa classe, volevo creare una classe composta da due metodi getConnection e inserDitta. Il primo crea una connessione al database Mysql il secondo inserisce una riga nella tabella persone.
La classe apre il collegamento al database mentre il metodo inserDitta non riesce ad inserire la riga con i dati.
Questo è l’errore che mi compare :
INSERT QUERY:INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Giacomo','vittoria','80');
INSERT ERROR :Transaction is being rolled back
Exception in thread "main" java.sql.SQLException
at Connessione.inserDitta(Connessione.java:43)
at Partenza.main(Partenza.java:8)
Qualcuno mi può aiutare Grazie
 public class Connessione 
{
	
		public static Connection getConnection() {
		
		Connection conn = null;
		try {
		Class.forName("com.mysql.jdbc.Driver");
		conn = DriverManager.getConnection(“jdbc:mysql://localhost:8080/test?user=root&password=root”);
		} catch (SQLException e) {
		JOptionPane.showMessageDialog(null, e.getMessage());
		} catch (ClassNotFoundException e) {
		JOptionPane.showMessageDialog(null, e.getMessage());
		}
		
		return conn;
		}
		
		public static  void inserDitta(String nome,String cognome, int eta)
				throws SQLException {
			Statement stmt = null;
			Connection conn = null;
			try{
				conn =getConnection();
				conn.setAutoCommit(false);
				stmt=conn.createStatement();
				String insertCompany="INSERT INTO `persone`"+"(`nome`,`cognome`,`eta`)";
				insertCompany += "VALUES ('"
				        +nome+"','"
				        +cognome+"','"
				        +eta+"');";
			        
			 
				System.out.println("INSERT QUERY:"+insertCompany);
				
				stmt.executeQuery(insertCompany);
				
			}catch (SQLException sqle) {
				if (conn !=null) conn.rollback();
				System.out.println("INSERT ERROR :Transaction is being rolled back");
				throw new SQLException();
				}finally {
					if (stmt !=null ) stmt.close();
					if (conn !=null) conn.close();
				}
		}
		
		}

19 Risposte

  • Re: Collegamento Mysql

    robyn78 ha scritto:


    INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Giacomo','vittoria','80');
    Prima di vedere questioni su Java ... questa insert l'hai provata "a mano" con un tool per MySQL? Perché se non ti funziona nemmeno a mano ... il problema non è certo lato Java.
  • Re: Collegamento Mysql

    Si l’ho provata su phpamm funziona correttamente inserisce la riga
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    Si l’ho provata su phpamm funziona correttamente inserisce la riga
    Bene, stampa quel sqle (che non hai fatto), così si vede esattamente COSA dice.
  • Re: Collegamento Mysql

    Scusami ma non ho capito
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    Scusami ma non ho capito
    Dicci quale eccezione (il messaggio completo) è sbucata fuori.
  • Re: Collegamento Mysql

    Ok.... questo è il messaggio che sbuca fuori dalla console Eclipse:

    INSERT QUERY:INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Naro','Marta','8');
    INSERT ERROR :Transaction is being rolled back
    Exception in thread "main" java.sql.SQLException
    at Connessione.inserDitta(Connessione.java:43)
    at Partenza.main(Partenza.java:9)
    Grazie mille per l'attenzione andbin
  • Re: Collegamento Mysql

    Ah... Dimenticavo questa è la classe con il main:
    import java.sql.SQLException;
    import java.util.Scanner;
    
    public class Partenza {
    
    	public static void main(String[] args) throws SQLException {
    		// TODO Auto-generated method stub
    Connessione.getConnection();
    Connessione.inserDitta("Naro","Marta",8);
    Scanner a=new Scanner(System.in);
    String testo=a.next();
    Testo.creaFile(testo);
    	}
    
    }
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    INSERT QUERY:INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Naro','Marta','8');
    INSERT ERROR :Transaction is being rolled back
    Exception in thread "main" java.sql.SQLException
    at Connessione.inserDitta(Connessione.java:43)
    at Partenza.main(Partenza.java:9)
    Non è questo che serve! Serve il messaggio della eccezione catturata in origine!!

    GUARDA bene, nel catch (SQLException sqle) fai un println di un tuo messaggio fisso e poi fai un throw new SQLException(). Questa eccezione è tua, nuova, e non "porta" alcuna informazione sulla fonte del problema.

    Interessa invece il messaggio del SQLException catturato!
    } catch (SQLException sqle) {
        System.out.println(sqle);   // <-------- QUESTO serve come minimo
  • Re: Collegamento Mysql

    Ciao Guarda se è questo:

    INSERT QUERY:INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Naro','Marta','8');
    java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
    INSERT ERROR :Transaction is being rolled back..cazzo
    Exception in thread "main" java.sql.SQLException
    at Connessione.inserDitta(Connessione.java:46)
    at Partenza.main(Partenza.java:9)
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
    Ok .... non ci ho fatto caso prima io (sorry ma oggi sono molto distratto ...). Se fai un INSERT, executeQuery() non va bene.
    Serve il executeUpdate(String sql)

    (che a parte il Update nel nome serve anche per INSERT e DELETE, non solo UPDATE).
  • Re: Collegamento Mysql

    Grazie per le risposte cosi celeri.
    Ho provato ma non funziona non da nessun errore stampa nella console :
    INSERT QUERY:INSERT INTO `persone`(`nome`,`cognome`,`eta`)VALUES ('Naro','Marta','8');
    ma non inserisce righe nel database.
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    ma non inserisce righe nel database.
    Non hai fatto il commit esplicitamente.
  • Re: Collegamento Mysql

    Scusa la mia ignoranza ma è da poco che mi dedico alla programmazione solo per hobby ma cosa intendi per commit.
  • Re: Collegamento Mysql

    robyn78 ha scritto:


    Scusa la mia ignoranza ma è da poco che mi dedico alla programmazione solo per hobby ma cosa intendi per commit.
    Hai fatto:

    conn.setAutoCommit(false);

    L'hai scritto per caso? O hai scopiazzato il codice da internet (senza capirlo)??

    Quando si disabilita così l'auto-commit è perché (tipicamente) il programmatore vuole gestire la "transazionalità" esplicitamente per conto proprio, perché ad esempio vuole che più operazioni su DB siano raggruppate in una unica transazione.

    Questo però vuol dire che bisogna fare le cose per bene: si disabilita l'auto-commit, si fanno le N operazioni. Se hanno tutte successo, si fa un commit() sulla Connection. Se invece salta fuori una eccezione si fa un rollback() che di fatto annulla tutte le operazioni.
Devi accedere o registrarti per scrivere nel forum
19 risposte