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

    [Java&Mysql] Eseguire file sql

    Salve,

    come faccio ad eseguire da Java un file .sql ,creato con MySql Administrator, per l'aggiornamento del db?

    ho provato questo codice :
    codice:
    try {
                Statement s = db.createStatement();
                BufferedReader in = new BufferedReader(new FileReader("file.sql"));
                String str;
                StringBuffer sb = new StringBuffer();
                while ((str = in.readLine()) != null) {
                    sb.append(str + "\n ");
                }
                in.close();
                s.addBatch(sb.toString());
                s.executeBatch();
                s.close();
               
                }
                
             catch (Exception e) {
                System.out.println("errore in aggiornamento");
    
            }
    ma ottengo il seguente errore :
    codice:
    java.sql.BatchUpdateException: 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 ';
     /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
     /*!40101' at line 7
    lo stesso file viene correttamente eseguito sia da mysql admin che da mysql query browser
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: [Java&Mysql] Eseguire file sql

    Originariamente inviato da JunkyFunki
    Salve,

    come faccio ad eseguire da Java un file .sql ,creato con MySql Administrator, per l'aggiornamento del db?

    ho provato questo codice :
    codice:
    try {
                Statement s = db.createStatement();
                BufferedReader in = new BufferedReader(new FileReader("file.sql"));
                String str;
                StringBuffer sb = new StringBuffer();
                while ((str = in.readLine()) != null) {
                    sb.append(str + "\n ");
                }
                in.close();
                s.addBatch(sb.toString());
                s.executeBatch();
                s.close();
               
                }
                
             catch (Exception e) {
                System.out.println("errore in aggiornamento");
    
            }
    ma ottengo il seguente errore :
    codice:
    java.sql.BatchUpdateException: 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 ';
     /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
     /*!40101' at line 7
    lo stesso file viene correttamente eseguito sia da mysql admin che da mysql query browser
    ...
    Le stringhe Sql terminano con un ";"?
    Hanno un caratteri di terminazione?
    Anche perchè tu prendi l'intero contenuto del file, ma se lo apri con un qualsiasi editor di testo ti rendi conto che la prima stringa è formata dalla testa del file che certamente non è un comando sql.
    Quindi dovresti per prima cosa rimuovere la testa dalla lettura del tuo file ( studia come è fatta, tramite un editor testuale ) e poi leggi ed esegui il tutto.
    Infatti la stringa che ti da errore è proprio parte della testa.

    Ovviamente in MySqlAdministrator questa cosa la sanno e per questo funziona
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Grazie per la risposta , ho cambiato il precedente codice nel seguente modo :
    codice:
    try {
                Statement s = db.createStatement();
               
    
    
                BufferedReader in = new BufferedReader(new FileReader(query));
                String str;
                StringBuffer sb = new StringBuffer();
                while ((str = in.readLine()) != null) {                
                    str.replaceAll("`", "");
                    if ((str.startsWith("/"))||(str.startsWith("-"))) {
                        
                    }
                    else {
                         sb.append(str + "\n ");
                    }
                }
                in.close();
                s.addBatch(sb.toString());
                s.executeBatch();
               
    
                s.close();
               
                }
                
             catch (Exception e) {
                System.out.println("errore \n" + query+"\n"+e);   
            }
    l'errore adesso è il seguente :
    codice:
     
    java.sql.BatchUpdateException: 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 ';
     USE archivio;
     
     
     DROP TABLE IF EXISTS `tabella`;
     CREATE TABLE `tabella` (
       `ID' at line 1
    molto probabilmente è il carattere -->` <-- a generare l'errore ma non riesco a toglierlo
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    L'elaborazione di queste stringhe è molto particolare.
    Quello che ti posso proporre è l'utilizzo in cascata di espressioni regolari che rimuovano il tutto.
    Oppure tramite le funzioni di stringa cercare l'index del carattere ', controllare se è corretto il suo inserimento ( tipo se preceduto da = ) e in caso contrario rimuoverlo sempre con funzioni di String.
    E' un lavoraccio, ma quando ci sarai riuscito avrai imparato molto!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Posta la parte iniziale del file sql.
    Al mio segnale... scatenate l'inferno!

  6. #6
    Originariamente inviato da R@ve M@ster
    Posta la parte iniziale del file sql.
    l'intero file sql da eseguire*
    codice:
    -- MySQL Administrator dump 1.4
    --
    -- ------------------------------------------------------
    -- Server version	5.0.45-community-nt
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    
    DROP TABLE IF EXISTS `tabella`;
    CREATE TABLE `tabella` (
      `ID` int(10) unsigned NOT NULL auto_increment,
      `stringa1` varchar(45) default NULL,
      `stringa2` varchar(45) default NULL,  
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=534 DEFAULT CHARSET=latin1;
    
    --
    -- Dumping data for table `tabella`
    --
    
    /*!40000 ALTER TABLE `tabella` DISABLE KEYS */;
    INSERT INTO `menu` (`ID`,`stringa1`,`stringa2`) VALUES 
     (1,'A','B);
    
    /*!40000 ALTER TABLE `tabella` ENABLE KEYS */;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

    *=la sola differenza fra il file postato e quello originale sta nel numero di righe presenti nella tabella

    da qui
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  7. #7
    dato che non riesco ad eseguire il file sql tramite java ho provato quest'altro codice :

    codice:
    Runtime r = Runtime.getRuntime();
            try {
                String command = "C:\\Programmi\\MySQL\\MySQL Server 5.0\\bin\\mysql -h localhost -u USER -pPSW nomeDB < aggiorna.sql";
                r.exec(command);            
            } catch (Exception e) {
                e.printStackTrace();
            }
    tanto per cambiare non funziona....o meglio java lo esegue senza dare msg d'errori ma il database non viene aggiornato...
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  8. #8
    Togli tutti i commenti dal file e lascia solo le "istruzioni utili"
    Al mio segnale... scatenate l'inferno!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.