Problema de Banco (Idiot Problem) (FAIL!)

java.sql.SQLException: Numeric value out of range

Meu Insert

insert into RelacaoItemPedido (codigo, Cd_pedido, Cd_produto, Quantidade_produto, Desconto_Produto, Valor_Total_produto) values (null, 1,1,1,0,2000.33);

Po… blz… até ai Funciona… Agora… meu Problem… Quando eu faço isso no resultset2 = statementt2.executeQuery(MeuSQL); Da um erro dizendo que o 2000.33 é Inválido…
OBS: o Valor_Total_produto é Double… Ja tentei com REal tmb não aceita…

Alguma dica

vc não deveria estar utilizando statementt2.executeUpdate nesse caso não?

posta a estrutura da sua tabela ai, e qual é o banco de dados.

Tabela RelacaoItemPedido

Codigo int(11) PK
Cd_Pedido int(11) FK
Cd_Produto int(11) FK
Quantidade_produto int(11)
Desconto_produto int(3)
Valor_Total_produto Double

Banco é o HsqlDb

é banco pra Windows Mobile…
Não muda muitu do SQL… OBS: lembre-se que meu insert no Banco funciona… Mas o Mesmo insert no Statement não funciona… OBS (INSERT) não Update ^^^
Não vou postar meus códigos porque são grandes e Complexos… N sou amador ^^

ABAIXO MINHA CLASSE MODAL… a Classe que contem meus itens do banco

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package Classes;

import Telas.AdicionarProdutos;

/**
*

  • @author guilherme.daros
    */
    public class RelacaoItemPedido {

    private int[] Cd_Pedido = new int[255];
    private int[] Cd_Produto = new int[255];
    private int[] Cd_relacao = new int[255];
    private int[] Quantidade_Produto = new int[255];
    private int[] Desconto_Produto = new int[255];
    private float[] Valor_Total_Produto = new float[255];
    private String[] NomeProduto = new String[255];
    private float[] valorUnit = new float[255];
    private AdicionarProdutos AdicionarProdutos;

    }[/code]

Olá …brother…vc já tentou …colocar o executeUpdate…porque com ele dá certo…também…na verdade utilizo ele por causa do retorno…
se realmente vc quer iserir da certo tanbo executeUpadate…quanto apenas o execute.

Posta sua classe onde vc realiza o insert/update/sei lá o que. O seu modelo não ajuda muito a entender o problema nesse caso. Alias, pq tem tanto array no seu modelo? não seria melhor criar o objeto e colocar ele numa lista ao invés de cada parametro num array?

Sim, nem nós. :wink:

Vlw a ajuda mas… FAIL! :shock:

O Update é para Update… Apesar de funcionar para fazer um Insert não é aconselhado<–Por MIM–< pelo ResultSet…

Mas de qualquer forma… o Erro é o mesmo… foi mal…

Vamos lá entao

Primeiro o Meu Controller

for (int x = 1; x < 255; x++) { if (RIP.getCd_Pedido(x) > 0) { SQL2 = "Insert Into RelacaoItemPedido(cd_pedido, Cd_Produto, Quantidade_Produto, Desconto_Produto,Valor_Total_Produto) values" + " (" + RIP.getCd_Pedido(x) + "," + RIP.getCd_Produto(x) + "," + RIP.getQuantidade_Produto(x) + "," + RIP.getDesconto_Produto(x) + "," + RIP.getValor_Total_Produto(x) + ");"; try { PedidoDAO.RealizarInsercaoSemconect(SQL2); } catch (SQLException ex) { ex.printStackTrace(); } } }

Depois o meu DAO

public static void RealizarInsercaoSemconect(String SQL2) throws SQLException { // Aqui eu realizo a conecção... Não tem nenhum erro nela então nao vou postar o código conexaoHSQLDB(); stmt2 = (Statement) conn.createStatement(); rs2 = stmt2.executeUpdate(SQL2); }

Quem disse que não?

[quote]
executeUpdate

public int executeUpdate(String sql)
throws SQLException

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

Parameters:
    sql - an SQL INSERT, UPDATE or DELETE statement or an SQL statement that returns nothing 
Returns:
    either the row count for INSERT, UPDATE or DELETE statements, or 0 for SQL statements that return nothing 
Throws:
    SQLException - if a database access error occurs or the given SQL statement produces a ResultSet object[/quote]

fonte: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)

o Interessante é que se eu pego meu Insert que é gerado no meu programa e o colo diretamento no Banco de dados ele funciona corretamente…
ou seja… Nao é erro de banco… Não é erro de Estrutura do Insert…

Outra… tenho que trabalhar com tantos vetores pois o JME que eu to trabalhando é bem Incompleto… e não funciona com listas de objetos

recomentações:

vc não está separando as responsabilidades de suas classes. se o seu controller está gerando o SQL que será utilizado no DAO, vc tem um problema ai.

o certo seria vc fazer passar esse array pro seu DAO, e ele montar o SQL e inserir no banco, afinal, a responsabilidade de persistencia é totalmente do DAO, não do controller.

após, isso, ao invés de vc utilizar Statment, vc deve utilizar PreparedStatment pra montar a sua query. fica muito mais legivel, é mais rápido e mais seguro, e vc fica menos sujeito a esse tipo de falhas.

faz essas alterações, acho que isso já vai resolver seu problema

PS: Não tenho certeza se tem essa interface em JME, mas acho que sim.

PS2: O executeUpdate retorna um In, que é o numero de linhas inseridas/atualizadas/deletadas, não um resultset, pelo menos foi o que eu entendi com a variavel “rs2” no seu código.

PS3: Abre um tópico na parte de JME do forum, assim pessoas com mais conhecimento específico vão poder te ajudar.

[]'s

Ja tentei isso… foi minha idéia primaria e … FAIL!!!
Não deu certo… o Sql foi montado da mesma forma… Executou da mesma forma e deu o erro da mesma forma …

OBS> Não precisa ser em JME porque o problema não está nos códigos de JME e sim no insert no Banco…
De alguma forma ele não permite eu inserir um FLoat atravez do meu programa… Sendo que lógicamente deveria deixar…

Ta… Vlw…> Consegui Resolver mas não fiquei Satisfeito…
Estou adicionando meu valor Float como String (‘233.23’)
O Banco fais a conversão automatica de String para Float…
Não sei porque funcionou… porque estava dando erro…
Mas na programação é assim…
Embromeixions

Poisé… Não está resolvido ainda…
Ele está dando o erro quando eu passo 222.23
Quando eu passo 222.00 ta ok…

Cara ver o tipo que vc colocou no banco… e o tipo que esta no java…talves seja isso…

Banco = REAL…
Classe = Float

Ambos são Iguais… Real = Float

cara assim que vc postou pela primeira vez… vc colocou 6 itens,.então…esta faltando um item no seu codigo verefica se esta mesmo…
falta o codigo que é nulll mais na inserção vc tem que colocar null, ai é foda em…6 e agora 5 da uma olhadinha ai…

é um campo auto incremento… nem esquenta com ele… o problema não é ele…
O problema é a inserção de um Float no Banco …
Não é só nesse insert que ta com esse problema

mesmo assim cara…não importa se ele é auto incremento…vc tem que colocar o valor de sendo null…

E ai funcionou…?

Nada… o problema não é nele… ja falei…
o problema é no Valor_total_produto… FLOAT… ele só ta aceitando INT
Não fais sentido