Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179

    [JAVA] inserire StringBuffer in database

    salve.... ho un problemino...
    come faccio ad inserire ciò che contiene lo stringBuffer in una tabella..?
    il mio stringBuffer è
    codice:
    StringBuffer scriptText = new StringBuffer();
    ..........
    metre la chiamata al database è
    codice:
    public static void inserisci(StringBuffer scriptText)
       {
            String connStr =
             "jdbc:mysql://localhost:1980/" +
             "test?user=root&password=nicola";
            String statement2 =
             "INSERT INTO guestbook (message, messageDate) " +
             "VALUES (?, ?)";
            Connection conn = null;   
          String PreparedStatement=null;   
          
           try {              
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection(connStr);
             PreparedStatement stmt2 = conn.prepareStatement(statement2);                     
             stmt2.setString(1, scriptText );
             stmt2.setObject(2, new java.util.Date());
             stmt2.executeUpdate();
             stmt2.close();
                } 
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (SQLException e){
                e.printStackTrace();}
             //    handle any errors
          }
    mi segnala errore nella riga blu...
    sicuramente sbaglio nel passare lo stringbuffer
    come faccio a risolvere?
    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Evidentemente il metodo setString() vuole un oggetto String e non StringBuffer.
    Quindi devi convertire prima il tuo oggetto in una stringa (ad esempio con il metodo toString() ).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    ho fatto cme hai detto....
    codice:
    public static void main(String[] args) {
    		try
            {
    	   
                String fileRead = "c:/Ingegneria/mysql/temp/pagina.txt"; //Nome File Input
    	    String fileWrite = "c:/Ingegneria/mysql/temp/script_JAVAout.txt"; //Nome File Output
                String testoPagina = readFile(fileRead);                
                Pattern  pattern = Pattern.compile ("<SCRIPT.*?>(.*?)/SCRIPT>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher (testoPagina);
                StringBuffer stringBuffer = new StringBuffer();
                FileOutputStream fos=new FileOutputStream(fileWrite,true);
                PrintStream ps=new PrintStream(fos);
                FileInputStream fis=new FileInputStream(fileRead);
                InputStreamReader isr=new InputStreamReader(fis);
                BufferedReader br=new BufferedReader(isr);
                String linea=br.readLine();
                int scriptNumber = 0;
                while (matcher.find ())
                {
                	scriptNumber++;
                    String script = matcher.group (0);     
                    StringBuffer scriptText = new StringBuffer();
                    scriptText.append("SCRIPT " + scriptNumber + ":\r\n ");
                    scriptText.append(script); 
                    scriptText.append("\r\n");
                    stringBuffer.append(scriptText);
                    System.out.println (scriptText);
                    
                    
                }
                if (stringBuffer.length() != 0)
                {
                	stringBuffer.append(scriptNumber +  " Script Trovati in " + fileRead);
                	writeFile(stringBuffer.toString(), fileWrite);
                	System.out.println (scriptNumber +  " Script Trovati in " + fileRead);
                    
                }else
                {
                	stringBuffer.append("NON CI SONO JAVASCRIPT o VBSCRIPT IN " + fileRead);
                	writeFile(stringBuffer.toString(), fileWrite);
                	System.out.println ("NON CI SONO JAVASCRIPT o VBSCRIPT IN " + fileRead);
                }
                 inserisci(stringBuffer.toString(), fileWrite); 
               
            }          
                    
            catch (Exception e)
            {
                System.out.println (e);
            }
    	}
    ho cambiato il metodo con
    codice:
    private static void inserisci(String string, String fileWrite) 
       {
            String connStr =
             "jdbc:mysql://localhost:1980/" +
             "test?user=root&password=nicola";
            String statement2 =
             "INSERT INTO guestbook (message, messageDate) " +
             "VALUES (?, ?)";
            Connection conn = null;   
          String PreparedStatement=null;   
          
           try {              
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection(connStr);
             PreparedStatement stmt2 = conn.prepareStatement(statement2);                     
             stmt2.setString(1, fileWrite);
             stmt2.setObject(2, new java.util.Date());
             stmt2.executeUpdate();
             stmt2.close();
                } 
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (SQLException e){
                e.printStackTrace();}
           catch (IllegalThreadStateException e) {
             e.printStackTrace();
          }
             //    handle any errors
          }
    ma il risultato non cambia... nel database non scrive nulla
    il programma vine eseguito senza errori ma alla fine
    scrive:

    java.lang.IllegalThreadStateException: process has not exited

    hai qualche consiglio da darmi???
    è tutto ben accetto... grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Prova a modificare la chiamata al metodo executeUpdate() come ti riporto sotto, in modo da poter controllare l'effettiva riuscita dell'esecuzione:
    codice:
    if (stmt2.executeUpdate() <= 0) {
       System.out.println("Esecuzione UPDATE non riuscita!");
    }
    stmt2.close();
    Quell'eccezione, comunque, dovrebbe indicare che il Thread che sta eseguendo la UPDATE non è nello stato di poterlo fare.
    Il perchè non te lo so dire, dovresti effettuare delle prove.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    ho risolto ma riesco ad inserire solo la prima ricerca (in tutto sono 13 risultati)
    ho fatto in questo modo....
    codice:
    private static void inserisci(String fileText, String fileName) throws IOException
       {
            String connStr =
             "jdbc:mysql://localhost:1980/" +
             "test?user=root&password=nicola";
            String statement2 =
             "INSERT INTO guestbook (message, messageDate) " +
             "VALUES (?, ?)";
            Connection conn = null;   
          String PreparedStatement=null;   
          
           try {           
             FileWriter fileWriter = new FileWriter(fileName);
    	 fileWriter.write(fileText);
    	 fileWriter.close(); 
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection(connStr);
             PreparedStatement stmt2 = conn.prepareStatement(statement2);                     
             stmt2.setString(1, fileText);
             stmt2.setObject(2, new java.util.Date());
             stmt2.executeUpdate();
             stmt2.close(); 
             if (stmt2.executeUpdate() <= 0) {
       System.out.println("Esecuzione UPDATE non riuscita!");
    }
    stmt2.close();
                }        
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (SQLException e){
                e.printStackTrace();}
           
             //    handle any errors
          }
    nella chiamata ho messo:
    codice:
    inserisci(stringBuffer.toString(), fileWrite);
    poi mi dice...
    java.lang.NullPointerException
    come faccio ad inserire anche le altre?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dovresti anche indicare in quale linea ti viene data quell'eccezione.
    Se stampi lo stackTrace() dell'Eccezione ti viene indicato tutto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    fileName è:
    codice:
    public static String readFile (String fileName)
    	throws IOException
    	{
    		InputStream is = null;
    		InputStreamReader isr = null;
    
    		StringBuffer sb = new StringBuffer ();
    		char[] buf = new char[1024];
    		int len;
    
    		try
    		{
    			is = new FileInputStream (fileName);
    			isr = new InputStreamReader (is);
    
    			while ((len = isr.read (buf)) > 0)
    				sb.append (buf, 0, len);
    
    			return sb.toString ();
    		}
    		finally
    		{
    			if (isr != null)
    				isr.close ();
    		}
    	}

  8. #8
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    inserendo l'eccezione
    codice:
    catch (NullPointerException e){
                e.printStackTrace();}
    mi segnale questi errori:
    codice:
    java.lang.NullPointerException
            at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1918)
            at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1897)
            at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1758)
            at NewClass.inserisci(NewClass.java:128)
            at NewClass.main(NewClass.java:46)
    la linea 46 corrisponde a:
    codice:
    inserisci(stringBuffer.toString(), fileWrite);
    la linea 128 a:
    codice:
    if (stmt2.executeUpdate() <= 0) {
    quello che tu mi hai fatto inserire
    e poi ritorna con l'eccezione
    java.lang.IllegalThreadStateException: process has not exited

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per forza: l'istruzione che ti ho fatto inserire io deve essere inserita al posto della tua istruzione stmt2.executeUpdate().
    Modifica il codice in questo modo (riporto solo la parte interessata):
    codice:
           try {           
             FileWriter fileWriter = new FileWriter(fileName);
    	 fileWriter.write(fileText);
    	 fileWriter.close(); 
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection(connStr);
             PreparedStatement stmt2 = conn.prepareStatement(statement2);                     
             stmt2.setString(1, fileText);
             stmt2.setObject(2, new java.util.Date());
             if (stmt2.executeUpdate() <= 0) {
                System.out.println("Esecuzione UPDATE non riuscita!");
             }
             stmt2.close(); 
                }        
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (SQLException e){
                e.printStackTrace();}
           
             //    handle any errors
          }
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    lele sei davvero gentile e mi spiace darti ancora fastidio...
    ma non funziona cmq...
    nel senso che gli errori delle eccezioni nn ci sono più ma continua a scrivere solo il primo risultato della ricerca e lo riscrive 13 volte (il numero cioè dei risultati della ricerca)
    in pratica la ricerca da 13 risultati diversi
    nel database mi vengono inserte 13 tuple conteneti tutte il primo risultato

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.