Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java] Problema con esecuzione query mysql

    Ciao a tutti, ho un piccolo problema con l'esecuzione di una query tramite Java su un database...non riesco a capire dove sbaglio e vorrei da voi un parere.

    Le classi del progetto Java sono due, la prima è:
    codice:
    import java.sql.*;
    
    public class InterfacciaDB {
    	
    	private Connection connection;
    	private Statement statement;
    	
    	public InterfacciaDB(String database){
    		String url=database,username="xyz",password="xyz";
    		connection=null;
    		
    		//Carica il driver per la connessione
    		try{
    			Class.forName("com.mysql.jdbc.Driver");
    			connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/"+url,username,password);
    			System.out.println("Connesso al database...");
    		}
    		catch(ClassNotFoundException cnfex){
    			System.err.println("Failed to load JDBC/ODBC driver");
    			System.exit(1);
    		}
    		catch(SQLException sqlex){
    			System.err.println("Unable To Connect");
    			sqlex.printStackTrace();
    		}
    	}
    
    public ResultSet esegui(String query, boolean update){
    		ResultSet result=null;
    		try{
    			statement=connection.createStatement();
    			if(update)statement.executeUpdate(query);
    			else result=statement.executeQuery(query);
    			statement.close();
    		}
    		catch(SQLException sqlex){
    			sqlex.printStackTrace();
    			return null;
    		}
    		catch(Exception e){
    			System.out.println("Errore query SQL");	
    			return null;
    		}
    		return result;
    	}
    	
    public void closeConnection(){
    		//Disconnessione
    		try{
    			connection.close();
    		}
    		catch(SQLException sqlex){
    			System.err.println("Unable to disconnect");
    			sqlex.printStackTrace();
    		}
    		System.out.println("Aggiornamento database effettuato.");
    	}
    la seconda classe sfrutta le funzioni della prima per inserire e selezionare dei dati nel database ed è così definita:
    codice:
     
    public class Elabora {
    
    	private InterfacciaDB db;
            public Elabora(){
                    db=new InterfacciaDB("ilnomedelmiodatabase");
    		try{
    			Esamina();
    		}catch(Exception e){
    			System.out.println("Errore caricamento interprete");
    			e.printStackTrace();
    		}
    		db.closeConnection();
             }
    
             private void Esamina(){
                    //altro codice di programma fino a giungere all'istruzione...
                    Codice_comp=CodiceCompagnia(dato);
             }
              
             public int CodiceCompagnia(String dato){
    		int Codice_comp=0;
    		int risCerca=CercaCompagnia(dato);
    		if(risCerca==0){
    			String query_ins_comp="INSERT INTO compagnia ( Nome ) VALUES ('"+dato+"')";
    			try{
    				db.esegui(query_ins_comp,true);
    				//Prelevo il codice associato all'ultima compagnia inserita
    				String query_codice="SELECT Codice FROM compagnia WHERE Nome='"+dato+"')";
    				ResultSet inserito=db.esegui(query_codice,false);
    				Codice_comp=inserito.getInt("Codice");
    			}catch(Exception e){System.out.println("Errore inserimento codice compagnia");}
    		}else Codice_comp=risCerca;
    		return Codice_comp;
    	}
    
            public int CercaCompagnia(String Compagnia){
    		String query_compagnie="SELECT * FROM compagnia";
    		try{
    			ResultSet comp_reg=db.esegui(query_compagnie,false);
    			while (comp_reg.next()){
    				String comp = comp_reg.getString("Nome");
    				if(Compagnia.compareToIgnoreCase(comp)==0)return (int)(comp_reg.getInt("Codice"));
    				//ritorna il codice se la compagnia è già registrata
    			}
    		}catch(Exception e){
    			System.out.println("Errore ricerca");
    		}
    		//Ritorna 0 se la compagnia è nuova
    		return 0;
    	}
    }
    
    public static void main(String[] args){
    		new Elabora();
    	}
    il problema è che eseguendo il programma ho questi messaggi stampati:
    Connesso al database...
    Errore ricerca
    Errore inserimento codice compagnia


    Non riesco a capire perchè? dove sbaglio? sembra che la query sql non venga accettata.

    Sapete aiutarmi?
    Luca >> http://www.pollosky.it

  2. #2
    nei catch prova a stamare e.printStackTrace(); cosi hai qualche info in +
    http://www.anobii.com/isalreadyinuse

  3. #3
    Ho inserito l'istruzione ed ecco il messaggio di errore che ho avuto.
    codice:
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    	at java.lang.reflect.Constructor.newInstance(Unknown Source)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    	at com.mysql.jdbc.Util.getInstance(Util.java:381)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2466)
    	at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
    	at InterfacciaDB.esegui(InterfacciaDB.java:48)
    	at Elabora.CodiceCompagnia(Elabora.java:188)
    	at Elabora.Esamina(Elabora.java:135)
    	at Elabora.Interprete(Elabora.java:90)
    	at Elabora.<init>(Elabora.java:46)
    	at Elabora.main(Elabora.java:248)
    java.lang.NullPointerException
    	at Elabora.CodiceCompagnia(Elabora.java:189)
    	at Elabora.Esamina(Elabora.java:135)
    	at Elabora.Interprete(Elabora.java:90)
    	at Elabora.<init>(Elabora.java:46)
    	at Elabora.main(Elabora.java:248)
    Errore inserimento codice compagnia
    Evidentemente non piace il formato della query che passo al db; oppure invece di executeUpdate o executeQuery dovrei utilizzare qualche istruzione più adatta.
    La cosa strana è che se eseguo la stessa query da phpmyadmin tutto funziona correttamente.

    Che ne pensate?
    Luca >> http://www.pollosky.it

  4. #4
    String query_codice="SELECT Codice FROM compagnia WHERE Nome='"+dato+"')";

    mi sa che quella parentesi alla fine è in piu
    http://www.anobii.com/isalreadyinuse

  5. #5
    Originariamente inviato da isAlreadyInUse
    String query_codice="SELECT Codice FROM compagnia WHERE Nome='"+dato+"')";

    mi sa che quella parentesi alla fine è in piu
    Cavolo hai ragione...

    ora ho corretto però ho un'altro problema, se eseguo il programma ora ho questo errore:
    codice:
    java.sql.SQLException
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    	at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:817)
    	at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2578)
    	at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2719)
    	at Elabora.CodiceCompagnia(Elabora.java:189)
    	at Elabora.Esamina(Elabora.java:135)
    	at Elabora.Interprete(Elabora.java:90)
    	at Elabora.<init>(Elabora.java:46)
    	at Elabora.main(Elabora.java:248)
    l'errore deriva dall'esecuzione dell'istruzione: Codice_comp=inserito.getInt("Codice");

    Ho fatto per caso qualche altra stupidaggine?

    In pratica in quel settore del programma io devo recuperare il valore del campo "Codice" del record appena inserito. C'è un modo più opportuno per farlo?
    Luca >> http://www.pollosky.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.