1
resposta

Salvar String no banco de dados

Estou tentando ampliar meu sistema e estou criando outras tabelas e campos. Estou criando a tabela 'produto', e para evitar que o usuario digite qualquer coisa no campo 'preço', criei uma mask usando JQuery. Porem, está dando algum erro para salvar exatamente esse campo no banco de dados. Alguem me diz o que posso fazer. Segue os codigos:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib tagdir="/WEB-INF/tags" prefix="erro"%>

<%@ include file="/WEB-INF/jsp/header.jsp"%>
<%@ include file="/WEB-INF/jsp/dropmenu.jsp"%>

<script
    src="<c:url value='/bootstrap/assets/js/vendor/jquery.maskedinput.min.js'/>"></script>
<script
    src="<c:url value='/bootstrap/assets/js/vendor/jquery.maskMoney.js'/>"></script>

<script>
    jQuery(function($) {
        $("#preco").maskMoney({
            prefix : 'R$ ',
            thousands : '.',
            decimal : ','
        });
    });
</script>

<form action="${linkTo[ProdutoController].adiciona(null)}" method="post">
    <div class="form-group row">
        <label class="col-xs-2 col-form-label" for="nome">Nome:</label>
        <div class="col-xs-12">
            <input type="text" name="produto.nome" id="nome" class="form-control"
                value="${produto.nome}" />
        </div>
    </div>
    <erro:validationMessage name="produto.nome" />

    <div class="form-group row">
        <label class="col-xs-2 col-form-label" for="descricao">Descricao:</label>
        <div class="col-xs-12">
            <input type="text" name="produto.descricao" id="descricao"
                class="form-control" value="${produto.descricao}" />
        </div>
    </div>
    <erro:validationMessage name="produto.descricao" />

    <div class="form-group row">
        <label class="col-xs-2 col-form-label" for="preco">Preço:</label>
        <div class="col-xs-12">
            <input type="text" id="preco" class="form-control"
                name="produto.preco" value="${produto.preco}" />
        </div>
    </div>
    <erro:validationMessage name="produto.preco" />

    <button type="submit" class="btn btn-success" value="Cadastrar"
        class="btn">Cadastrar</button>
</form>

<%@ include file="/WEB-INF/jsp/footer.jsp"%>
package br.unemat.digera.modelos;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @NotEmpty
    private String nome;

    @NotEmpty
    private String descricao;

    @NotEmpty
    private String preco;

    public Produto() {}

    public Produto(int id, String nome, String descricao, String preco) {
        this.id = id;
        this.nome = nome;
        this.descricao = descricao;
        this.preco = preco;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getPreco() {
        return preco;
    }

    public void setPreco(String preco) {
        this.preco = preco;
    }

}

Segue o erro que aparece na página:

java.sql.SQLException: Data truncated for column 'preco' at row 1

P.S: verifiquei no MySQL e a tabela foi criada, porem, vazia.

1 resposta

Verifique se a sua coluna 'preco' no banco está definida como varchar.

Se estiver, verifique o tamanho que você para a coluna. Pode ser que você esteja gerando um string maior do que esta coluna aceita.

Lembrando que você mapeou de forma que ela a string não pode ser vazia.