Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    Stampare con Java un valore int null di MySQL

    Ciao a tutti,
    ecco un piccolo problema che non sono riuscito a risolvere nonostante abbia cercato (e provato) diverse soluzioni.
    Ho una semplice tabella di MySQL da cui estraggo i dati composta da 4 campi. Tre di questi sono varchar e uno è int. 2 campi varchar sono impostati come obbligatori, gli altri due campi sono facoltativi. Se tralascio l'inserimento di un campo int mi stampa a video null, mentre tralasciando un varchar mi lascia la cella vuota. Come posso fare per ottenere anche nel primo caso (ovvero non inserendo il valore int) la cella vuota al posto di null?
    Questo è il punto in cui ricevo i dati dal form:
    codice:
            //RICEVO I DATI DAL FORM ED EFFETTUO L'INSERIMENTO
      	String author = request.getParameter("author");
      	String title = request.getParameter("title");
      	
      	String y = request.getParameter("year");
      	int year = -1;
      	if(y!=null && !y.isEmpty()){year = Integer.parseInt(y);}
      	
      	String remark = request.getParameter("remark");
      	if(author!=null && !author.isEmpty() && title!=null && !title.isEmpty()
      	/*&& year!=null && !year.isEmpty() && remark!=null && !remark.isEmpty()*/){
        	BooksWorker.insert(author, title, year, remark);
      	}
    Questo è il metodo di inserimento:
    codice:
    public static void insert(String author, String title, int year, String remark) {
        
    		try{
    			Class.forName("com.mysql.jdbc.Driver");
    			
    			Connection c = DriverManager.getConnection(url, "root", "root");
    			
    			String insert = "INSERT INTO books(author, title, year, remark) VALUES(?, ?, ?, ?)";
     
    
    			PreparedStatement ps = c.prepareStatement(insert);
    			ps.setString(1, author);
    			ps.setString(2, title);
    			//YEAR DEVE ESSERE POSITIVO, SENNO' LO SETTO A NULL
    			if(year>0){ps.setInt(3, year);}
    			else{ps.setNull(3, java.sql.Types.INTEGER);}
    			ps.setString(4, remark);
    			ps.executeUpdate(); 
    			
    			
    			c.close();
    		} 
    		catch(Exception ex){
    			Logger l = Logger.getLogger(BooksWorker.class.getName());
    			l.log(Level.SEVERE, null, ex);
    		}
    		
    	}
    infine ecco dove vado a stampare la table:
    codice:
    	  		Iterator<String> it = list.iterator();
    	
    	  		while(it.hasNext()){
    	      		id = Integer.parseInt(it.next());
    	      		out.print("<tr>");
    	      		for(int i = 0; i < 4; i++){
    	          		out.print("<td>");
    	          		out.print(it.next());
    	          		out.print("</td>");
    	  			}
    	  			out.print("<td>");
    	  			String box = "<input name=r" + id + " type='checkbox'>";
    	  			out.print(box);
    	  			out.print("</td>");
    	  			out.print("</tr>");

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa lo setti a null e ti chiedi perché legge null?
    al max devi essere tu runtime a stampare solo se ha valore not null

    ps settare a null è cmq errato
    RTFM Read That F*** Manual!!!

  3. #3
    scusami, per settato a null intendo dire che l'utente può non inserire il dato nella form...
    cosa c'è di sbagliato di preciso?
    ho tentato con qualcosa del genere:
    codice:
    while(it.hasNext()){
    	  			
    	      		id = Integer.parseInt(it.next());
    	      		out.print("<tr>");
    	      		for(int i = 0; i < 4; i++){
    	      			if(it.next() != null){
    	          		     out.print("<td>");
    	          		     out.print(it.next());
    	          		     out.print("</td>");
                                    }
    	  		}
    ma nulla da fare... mi restituisce java.lang.NumberFormatException

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    è errato inserire VOLUTAMENTE un valore null in un intero e questo te lo dimostra.
    codice:
    id = Integer.parseInt(it.next());
    qui prendi il successivo, che è null, lo passi al metodo parseInt che giustamente ti risponde picche perché quel metodo trasforma un oggetto (tipicametne stringa) che ha al suo interno un interno nell'intero corrispondente, lanciando una NumberFormatException in caso di errore (mi meraviglio non ci sia NullPointerException).

    Metti un valore di default, per anno 0 oppure -1 potrebbe andare bene
    RTFM Read That F*** Manual!!!

  5. #5
    evidentemente sbaglio il punto in cui lo faccio, perchè nella prima parte di codice (la jsp della form), year è settato a -1...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    codice:
    if(year>0){ps.setInt(3, year);}
    			else{ps.setNull(3, java.sql.Types.INTEGER);}
    tu fai questo ed è qui che si generara l'errore!!!
    RTFM Read That F*** Manual!!!

  7. #7
    sapresti suggerirmi come modificare la cosa?
    con qualcosa tipo:
    codice:
    else{ps.setString(3, "");}
    ovviamente non può funzionare, ci ho appena provato...
    come posso fare per ottenere il risultato finale di non vedermi sul monitor la cella con scritto null, ma una cella vuota e basta?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    sarebbe meglio non mettere null nel db, non è una buona prassi. Se proprio devi il tuo ciclo diventa questo

    Codice PHP:

    Iterator
    <Stringit = list.iterator();
        
    String temp null
          while(
    it.hasNext()){
                   
    temp it.next(); 
                   if (
    temp != null){
                     
    id Integer.parseInt(temp);
                      
    out.print("<tr>");
                      for(
    int i 04i++){
                          
    out.print("<td>");
                          
    out.print(it.next());
                          
    out.print("</td>");
                      }
                      
    out.print("<td>");
                      
    String box "<input name=r" id " type='checkbox'>";
                      
    out.print(box);
                      
    out.print("</td>");
                      
    out.print("</tr>");
                   } 
    poi non so se nel resto della tua logica è corretto, questo dovrebbe proteggerti dal primo valore null
    RTFM Read That F*** Manual!!!

  9. #9
    scusami se ti rispondo solo adesso e grazie per il suggerimento. purtroppo però ancora non funge...

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da redluck
    scusami se ti rispondo solo adesso e grazie per il suggerimento. purtroppo però ancora non funge...
    scrivi per benino il codice, perché a sto punto non so che hai combinato col db
    RTFM Read That F*** Manual!!!

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.