Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    [SQL] Problema con data truncation

    Ho un form su una pagina JSP, uno dei campi accetta del testo di lunghezza massima 40 caratteri, inserisco una stringa di 24, faccio il submit, questa stringa dovrebbe essere inserita in una tabella in un campo definito come Vachar(40), ma invece parte un'eccezione che riporta:
    Data truncation: Data too long for column 'Ricetta' at row 1

    Come è possibile?
    Ho fatto delle prove, dal form accetta stringhe di lunghezza massima pari a 20 caratteri, mentre se provo a fare l'inserimento manualmente dalla console di mysql posso inserire stringhe anche più lunghe.

  2. #2
    posta un pò di codice
    Al mio segnale... scatenate l'inferno!

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Questa è la riga del form dove inserisco la stringa che da problemi
    codice:
    <tr>
         <td width="30%">Nome ricetta</td>
         <td width="70%"><input type="text" name="nome" maxlength="40"/></td>
    </tr>
    Questa è la parte della servlet che preleva tale stringa e la invia alla classe controller
    codice:
    String nome = request.getParameter("nome");
    ... //qui l'acquisizione degli altri dati
    
    //Costruisco l'oggetto da passare come parametro
    Ricetta ricetta = new Ricetta(nome,descrizione,tempo,difficolta,tipo,ingrediente1,ingrediente2,ingrediente3,autore);
    
    //passo al controller
    String esitoinserimento = RicettaController.creaRicetta(ricetta);
    ...
    Il controller passa semplicemente il parametro alla classe di dominio
    codice:
    public static String creaRicetta(Ricetta ricetta) {
    	return (Ricetta.creaRicetta(ricetta));
    }
    Costruttore dell'oggetto Ricetta, metodo che restituisce il nome e passaggio alla classe DAO
    codice:
    //qui sopra ci sono le dichiarazioni delle variabili
    public Ricetta(String nomeR, String descrizioneR, int tempoR, int difficoltaR, String tipoR, String ingr1R, String ingr2R, String ingr3R, String autoreR) {
    	nome = nomeR;
    	descrizione = descrizioneR;
    	tempo = tempoR;
    	difficolta = difficoltaR;
    	ratingMedio = 0;
    	dataScelta = "";
    	tipo = tipoR;
    	ingrediente1 = ingr1R;
    	ingrediente2 = ingr2R;
    	ingrediente3 = ingr3R;
    	autore = autoreR;	
    }
    ...
    public String getNome() {
    	return nome;
    }
    ...
    public static String creaRicetta(Ricetta ricetta) {
    	return RicettaDAO.creaRicetta(ricetta);
    }
    infine l'inserimento da parte della classe DAO
    codice:
    ...
    PreparedStatement insertRicetta3ingr = null;
    ...
    try	{
    	conn = connection.getConnection();
    	conn.setAutoCommit(false);
    	Statement stmt = conn.createStatement(); 
    	insertRicetta3ingr = conn.prepareStatement("INSERT INTO ricetta (nome, descrizione, tempoPreparazione, difficolta, tipoPortata, ingrediente1, ingrediente2, ingrediente3, autore)" +
    					" VALUES (?,?,?,?,?,?,?,?,?);");
    ... 
    insertRicetta3ingr.setString(1,ricetta.getNome());
    ... //set degli altri parametri che funzionano sempre
    insertRicetta3ingr.executeUpdate();
    conn.commit();
    ...
    //qui sotto le catch

  4. #4
    Prova a mettere nell'input text l'id="nome" e non name="nome". Magari c'è qualche altro campo con lo stesso valore per l'attributo name. L'id invece è univoco per ogni campo.

    In realtà dovresti fare così per tutti i campi, e prelevarli tramite l'id. Non tramite il name.
    Al mio segnale... scatenate l'inferno!

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Purtroppo non è questo il problema

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Hai guardato bene il messaggio d'errore?
    Data truncation: Data too long for column 'Ricetta' at row 1
    Dov'è il campo "Ricetta" nella tua query? Da quello che hai postato hai una tabella che si chiama Ricetta... non un campo... quindi l'errore è su un'altra query, probabilmente su un'altra tabella...


    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
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Hai ragione, si riferisce ad un'altra tabella, ma anche la colonna Ricetta di questa è varchar(40) e la stringa da inserire la prende dallo stesso posto dell'altra, ecco tutte le istruzioni per l'inserimento
    codice:
    ...
    insertRicetta3ingr = conn.prepareStatement("INSERT INTO ricetta (nome, descrizione, tempoPreparazione, difficolta, tipoPortata, ingrediente1, ingrediente2, ingrediente3, autore)" VALUES (?,?,?,?,?,?,?,?,?);");
    
    insertIngredienti = conn.prepareStatement("INSERT INTO ingredientePrincipale VALUES (?,?);");
    
    insertCrea = conn.prepareStatement("INSERT INTO crea VALUES (?,?);");
    
    insertRicetta3ingr.setString(1,ricetta.getNome());
    insertRicetta3ingr.setString(2,ricetta.getDescrizione());
    insertRicetta3ingr.setInt(3,ricetta.getTempo());
    insertRicetta3ingr.setInt(4,ricetta.getDifficolta());
    insertRicetta3ingr.setString(5,ricetta.getTipo());
    insertRicetta3ingr.setString(6,ricetta.getIngrediente1());
    insertRicetta3ingr.setString(7,ricetta.getIngrediente2());
    insertRicetta3ingr.setString(8,ricetta.getIngrediente3());
    insertRicetta3ingr.setString(9,ricetta.getAutore());
    insertRicetta3ingr.executeUpdate();
    insertIngredienti.setString(1,ricetta.getIngrediente1());
    insertIngredienti.setString(2,ricetta.getNome());
    insertIngredienti.executeUpdate();
    insertIngredienti.setString(1,ricetta.getIngrediente2());
    insertIngredienti.setString(2,ricetta.getNome());
    insertIngredienti.executeUpdate();
    insertIngredienti.setString(1,ricetta.getIngrediente3());
    insertIngredienti.setString(2,ricetta.getNome());
    insertIngredienti.executeUpdate();
    insertCrea.setString(1,ricetta.getNome()); //dovrebbe essere questa a dare problemi
    insertCrea.setString(2,ricetta.getAutore());
    insertCrea.executeUpdate();
    conn.commit();
    La tabella Crea ha le colonne Ricetta e Chef.
    Dentro a ricetta.getNome() c'è la stringa giusta, ho provato a mettere un System.out.println(ricetta.getNome()) ed è la stessa cosa che scrivo nel campo nome del form.

  8. #8
    La tabella Crea ha le colonne Ricetta e Chef.
    Sono gli unici campi della tabella? Oppure c'è qualche altro campo tipo id o cose del genere... (è buona prassi inserire un campo id univoco in ogni tabella)
    Al mio segnale... scatenate l'inferno!

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Mah... non so da cosa dipendesse, ho droppato il db e l'ho rimesso su... adesso funziona.

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.