Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    35

    Conversione data-stringa in java con database

    Salve a tutti. Ho riscontrato un problema nel prelevare dati da un database.
    Ho un database con una colonna di tipo data che vorrei convertire in String nel momento in cui viene letta da java altrimenti non è possibile essere inserita in un arraylist. Mi spiego meglio:

    codice:
    String id = "isbn";
    		String matricola = "09409340935";
    
    		GregorianCalendar uno = new GregorianCalendar();
    		SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
    		Date inizioPrestito = uno.getTime();
    		uno.add(GregorianCalendar.DAY_OF_MONTH, 15);
    		Date finePrestito = uno.getTime();
    		String a = sdf.format(inizioPrestito);
    		String b = sdf.format(finePrestito);
    		System.out.println(a + " -> " + b);
    		DbConnection.getInstance().eseguiAggiornamento("insert into prestito values" +
    				" ("+null+", '"+id+"' , '"+matricola+"' , '"+a+"' , '"+b+"')");
    In questo modo inserisco i valori nel database. Il problema è che quando vado a prelevare il valore di fine prestito mi dà errore, che è questo

    codice:
    Exception in thread "main" java.lang.NumberFormatException: For input string: "2012-03-05"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Long.parseLong(Unknown Source)
    	at java.lang.Long.parseLong(Unknown Source)
    	at unisalento.business.dbinterface.dao.PrestitoDAO.getPrestiti(PrestitoDAO.java:36)
    	at unisalento.business.core.model.test.Test3.main(Test3.java:40)
    n.b. nelle classi le date sono trattate come long, solo all'inserimento è scritto nel modo in cui ho postato. Credo ci sia una gran confusione, vi chiedo di chiarirmela, grazie!

  2. #2
    Se magari ci facessi vedere come li prelevi questi dati forse eviteremmo di usare la palla di vetro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    35
    Si scusami, questo è il metodo che ho fatto:

    codice:
    public ArrayList<RigaPrestito> getPrestiti() throws ParseException {
    		
    		ArrayList<RigaPrestito> lista=new ArrayList<RigaPrestito>();
    		
    		Vector<String[]> risultato=DbConnection.getInstance().eseguiQuery("select P.nome, P.cognome, S.matricola, E.fineprestito, E.idPrestito, E.Risorsa_idRisorsa, R.nome from portalestudenti.persona as P inner join portalestudenti.prestito as E inner join portalestudenti.studente as S inner join portalestudenti.risorsa as R on S.Persona_username = P.username and R.idRisorsa=E.Risorsa_idRisorsa");
    		for(int i=0;i<risultato.size();i++) {
    			String[] riga=risultato.get(i);
    			RigaPrestito r = new RigaPrestito();
    			
    			r.setNome(riga[0]);
    			r.setCognome(riga[1]);
    			r.setMatricola(riga[2]);
    			r.setFinePrestito(Long.parseLong(riga[3]));
    			r.setIdPrestito(Integer.parseInt(riga[4]));
    			r.setIdRisorsa(riga[5]);
    			r.setNomeRisorsa(riga[6]);
    			
    			lista.add(r);
    		}
    		
    		return lista;
    		
    	}
    
    }
    Il problema è a r.setFinePrestito....

  4. #4
    Mancherebbe anche il codice del metodo "eseguiQuery", ma interrogando la mia palla di vetro molto probabilmente il quel metodo converti la tua data in stringa (forse sempre con SimpleDateFormat) e nel metodo postato cerchi di creare un long (parse) da una stringa "yyyy-MM-dd" cosa che ovviamente non consentita (come faresti tu a convertire questa stringa in un numero ?).
    Soluzione e abbastanza semplice
    codice:
    try{
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date date = df.parse(riga[3]); //Converto la stringa in oggetto Date
    r.setFinePrestito(date.getTime());//converto la mia Data in Long
    }catch(ParseException e)
    {
      //qui dovrai gestire l'eccezione in caso di stringa non ben formata
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    35
    guarda per completezza ti posto anche il metodo eseguiquery che fa parte di una classe che gestisce il collegamento col il db... cmq questo try andrebbe messo nel metodo che va a prendere i dati dal db??

    codice:
    public Vector<String[]> eseguiQuery(String query) {
    		      Vector<String[]> 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<String[]>();
    		         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( (String[]) record.clone() );
    		         }
    		         rs.close();     // Chiudo il ResultSet
    		         stmt.close();   // Chiudo lo Statement
    		      } catch (Exception e) { e.printStackTrace(); }
    
    		      return v;
    		   }

  6. #6
    Ovviamente no a me no che non vuoi cambiare la logica di questo metodo in quanto ti fai ritornare un Vector<String[]> e quindi una conversione a Date o a Long non la potresti fare.
    Il codice che ti ho postato ti serve nel metodo getPrestiti per appunto settare FinePrestito...

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    35
    ok grazie

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.