Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755

    [Java]Problema query access

    prendo spunto dalla pillola dell'accesso a MySql per connettermi ad un db access
    ha funzionato tutto perfettamente con la classe ODBCDatabase, almeno fino ad ora

    tento la seguente query
    codice:
    SELECT DISTINCT TOP 1 tempEvents.data, DatePart("w",tempEvents.Data) AS dp FROM tempEvents WHERE (DatePart("w",tempEvents.Data))=4  ORDER BY tempEvents.data DESC
    ma ottengo il seguente errore

    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unkno wn Source)
    at ODBCDatabase.eseguiQuery(ODBCDatabase.java:67)
    at provaDB.main(provaDB.java:37)
    cosa può essere? Chiaramente copiata e incollata su access funziona
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Se non posti il codice, non si riesce a vedere l'errore, che non sta nella query, ma nel codice java . Posta la classe ODBCDatabase e in particolare il metodo eseguiQuery.

  3. #3
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    scusate ho fatto una leggerezza da principiante
    codice:
    /*
     * Classe dedicata alla gestione del Database.
     * Gestisce l'apertura e la chiusura della connessione col Database
     * Fornisce i metodi per l'esecuzione delle query sul Database
     */
    import java.sql.*;
    import java.util.Vector;
    
    public class ODBCDatabase {
    
       private String nomeDSN;         // Nome DSN dell'origine dati ODBC
       private String[][] attributi;   // Insieme di attributi da usare per la connessione
       private String errore;          // Stringa contenente un eventuale messaggio di errore
       private Connection db;          // Oggetto che rappresenta la connessione col DB
       private boolean connesso;       // Flag che indica se il DB è connesso o meno
    
       public ODBCDatabase(String nomeDSN) {
          this.nomeDSN = nomeDSN;
          attributi = new String[0][0];
          connesso = false;
       }
    
       public ODBCDatabase(String nomeDSN, String [][] attributi) {
          this.nomeDSN = nomeDSN;
          this.attributi = attributi;
          connesso = false;
       }
    
       public boolean connetti() {
          connesso = false;
          try {
    
             // Carico il bridge JDBC-ODBC per la connessione con il database
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    
             String conString = "jdbc:odbc:" + nomeDSN;   // Il nome del DSN può anche essere vuoto!!
    
             // Controllo se ci sono attributi ausiliari da usare per la connessione
             if (attributi.length > 0) {
    
                // Uso gli attributi per la connessione
                for (int i=0; i<attributi.length; i++) {
                   conString += ";" + attributi[i][0] + "=" + attributi[i][1];
                }
             }
    
             // Effettuo la connessione
             db = DriverManager.getConnection( conString );
    
             // La connessione è avvenuta con successo
             connesso = true;
          } catch (Exception e) { errore = e.getMessage(); }
    
          return connesso;
       }
    
       // Esegue una query di selezione dati sul Database
       // query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
       // colonne: il numero di colonne di cui sarà composta la tupla del risultato
       // ritorna un Vector contenente tutte le tuple del risultato
       public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
             ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add(record.clone() );
             }
    
             rs.close();     // Chiudo il ResultSet
             stmt.close();   // Chiudo lo Statement
          } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
    
          return v;
       }
    
       // Esegue una query di aggiornamento sul Database
       // query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
       // ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
       public boolean eseguiAggiornamento(String query) {
          int numero = 0;
          boolean risultato = false;
          try {
             Statement stmt = db.createStatement();
             numero = stmt.executeUpdate(query);
             risultato = true;
             stmt.close();
          } catch (Exception e) {
             e.printStackTrace();
             errore = e.getMessage();
             risultato = false;
          }
          return risultato;
       }
    
       // Chiude la connessione con il Database
       public void disconnetti() {
          try {
             db.close();
             connesso = false;
          } catch (Exception e) { e.printStackTrace(); }
       }
    
       public boolean isConnesso() { return connesso; }   // Ritorna TRUE se la connessione con il Database è attiva
       public String getErrore() { return errore; }       // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
    }
    mentre la mia classe è

    codice:
    public class provaDB{
    	public static void main(String [] args){
    		BufferedReader IN=new BufferedReader(new InputStreamReader(System.in));
    		boolean temp;
    		Vector rs;
    		ODBCDatabase db=new ODBCDatabase("javaAttivita");
    		String dataInizio;
    		String dataFine;
    		String[] record;
    		if(db.connetti()){
    			System.out.print("Pulisco tabella temporanea eventi ");
    			if(!db.eseguiAggiornamento("DELETE FROM tempEvents"))
    				return;
    			System.out.println("Fatto");
    			System.out.print("Aggiorno tabella temporanea eventi ");
    			if(!db.eseguiAggiornamento("INSERT INTO tempEvents ( data, idUser ) SELECT DISTINCT Events.Date, Events.UsersID FROM Events WHERE (((Events.Date) Is Not Null)) ORDER BY Events.Date DESC;"))
    				return;
    			System.out.println("Fatto");
    			System.out.print("Pulisco tabella temporanea utenti ");
    			if(!db.eseguiAggiornamento("DELETE FROM tempUsers"))
    				return;
    			System.out.println("Fatto");
    			System.out.print("Aggiorno tabella temporanea utenti ");
    			if(!db.eseguiAggiornamento("INSERT INTO tempUsers ( UserID, [User], dataInizio ) SELECT users.UserID, users.User, users.dataInizio FROM users;"))
    				return;
    			System.out.println("Fatto");
    			System.out.print("Carico defaults ");
    			rs=db.eseguiQuery("SELECT TOP 1 tempEvents.data FROM tempEvents ORDER BY data ASC");
    			record = (String[]) rs.elementAt(0);
    			dataInizio=(record[0].replace("-","")).substring(0,8);
    			System.out.println(". ");
    			String qry="SELECT DISTINCT TOP 1 tempEvents.data, DatePart(\"w\",tempEvents.Data) AS dp FROM tempEvents WHERE (DatePart(\"w\",tempEvents.Data))=4 ORDER BY tempEvents.data DESC 
    			rs=db.eseguiQuery(qry);
    			if(rs!=null){
    				record = (String[]) rs.elementAt(0);
    				dataFine=(record[0].replace("-","")).substring(0,8);
    				System.out.println("df "+dataFine);
    			}
    			db.disconnetti();
    			
    		}else{
    			//connessione non riuscita
    			System.out.println("ERRORE:"+db.getErrore());
    		}
    	}
    }
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Mi puoi indicare la riga 67 della classe ODBCDatabase?

  5. #5
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    E' quella in rosso
    codice:
    /*
     * Classe dedicata alla gestione del Database.
     * Gestisce l'apertura e la chiusura della connessione col Database
     * Fornisce i metodi per l'esecuzione delle query sul Database
     */
    import java.sql.*;
    import java.util.Vector;
    
    public class ODBCDatabase {
    
       private String nomeDSN;         // Nome DSN dell'origine dati ODBC
       private String[][] attributi;   // Insieme di attributi da usare per la connessione
       private String errore;          // Stringa contenente un eventuale messaggio di errore
       private Connection db;          // Oggetto che rappresenta la connessione col DB
       private boolean connesso;       // Flag che indica se il DB è connesso o meno
    
       public ODBCDatabase(String nomeDSN) {
          this.nomeDSN = nomeDSN;
          attributi = new String[0][0];
          connesso = false;
       }
    
       public ODBCDatabase(String nomeDSN, String [][] attributi) {
          this.nomeDSN = nomeDSN;
          this.attributi = attributi;
          connesso = false;
       }
    
       public boolean connetti() {
          connesso = false;
          try {
    
             // Carico il bridge JDBC-ODBC per la connessione con il database
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    
             String conString = "jdbc:odbc:" + nomeDSN;   // Il nome del DSN può anche essere vuoto!!
    
             // Controllo se ci sono attributi ausiliari da usare per la connessione
             if (attributi.length > 0) {
    
                // Uso gli attributi per la connessione
                for (int i=0; i<attributi.length; i++) {
                   conString += ";" + attributi[i][0] + "=" + attributi[i][1];
                }
             }
    
             // Effettuo la connessione
             db = DriverManager.getConnection( conString );
    
             // La connessione è avvenuta con successo
             connesso = true;
          } catch (Exception e) { errore = e.getMessage(); }
    
          return connesso;
       }
    
       // Esegue una query di selezione dati sul Database
       // query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
       // colonne: il numero di colonne di cui sarà composta la tupla del risultato
       // ritorna un Vector contenente tutte le tuple del risultato
       public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
             ResultSet rs = stmt.executeQuery(query);     // Ottengo il ResultSet dell'esecuzione della query
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add(record.clone() );
             }
    
             rs.close();     // Chiudo il ResultSet
             stmt.close();   // Chiudo lo Statement
          } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
    
          return v;
       }
    
       // Esegue una query di aggiornamento sul Database
       // query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
       // ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
       public boolean eseguiAggiornamento(String query) {
          int numero = 0;
          boolean risultato = false;
          try {
             Statement stmt = db.createStatement();
             numero = stmt.executeUpdate(query);
             risultato = true;
             stmt.close();
          } catch (Exception e) {
             e.printStackTrace();
             errore = e.getMessage();
             risultato = false;
          }
          return risultato;
       }
    
       // Chiude la connessione con il Database
       public void disconnetti() {
          try {
             db.close();
             connesso = false;
          } catch (Exception e) { e.printStackTrace(); }
       }
    
       public boolean isConnesso() { return connesso; }   // Ritorna TRUE se la connessione con il Database è attiva
       public String getErrore() { return errore; }       // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
    }
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

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.