Campo mes Trunca os dados! PQ?

Bom e o seguinte eu tenho um jsp assim:

ele faz upload num arquivo csv e depois insere os dados no banco meu banco e constituido assim:

ele antes funcionava tranquilamente foi entaum q resolvi mudar o campo mes(int) para mes(varchar de 4) ele fazia as buascas e inseria na tabela tudo correto so q surgia umas pas assim

ao lado dos campos na tabela isso ocasinava erro e eu qria so transformar o mes de int( numeros tipo 06, 07, 08, 09…) para String(jan, fev, mar) e ele dava este erro, bom dai qs voltar a fazer com numeros pois axei um funcão q trasnforma os numeros em texto dai , so q dai começo a dar problema tipo ele da um erro assim

diz q todos so campos da fileira um foram truncados para o mes mas pq isso se antes tudo ocorria corretamente??? isso e um problema na tabela ou no arquivo csv??? pq tipo no jsp n deve ser pq n mexi nada nele e antes funcionava!!! a unica coisas q fiz foi qmudei o csv e depois ateh fiz outros n sei se isso pode dar erro, e tbn mudei o campo mes de int(2) para varchar(4) e tipo agora ja coloquei denovo como era e ele da este erro ateh escrevi a tabela denovo mas n adianta!!!pq sera q acontece isso
Bom galera fico no aguardo ai qm puder me ajudar valew!!!

a) Tome um calmante primeiro - chá de folhas de maracujá, por exemplo.
Como disse o Parreira na entrevista depois do jogo contra Gana, pressa != velocidade.

b) Pra resolver problemas esquisitos, quebre-o em pedaços. Veja, por exemplo, se o tal arquivo CSV está correto.

Não se esqueça que em um arquivo CSV, strings são gravadas de forma diferente de números. Por exemplo:

“1,23”;1,23

No primeiro caso você tem a string 1,23 e no segundo o número 1,23. Se você criou o CSV como número e vai tentar ler como string talvez dê algum chabu.

hum mm mas como por exemplo!! eu sei como eu salavo o csv em numero ou em String?? pq eu simplesmente tenho o arquivo no Excel(xsl) e passo ressalvo ele em csv tem algum diferencial quando se executa este processo???

Use o Bloco de Notas (Notepad) para abrir o arquivo .CSV, para ver se ele está no formato correto.

Se for usar o Excel para checar o arquivo .CSV, você sabe se foi gravado como “123” (string) ou 123 (número) se você reparar na formatação - se for string, ele fica alinhado à esquerda. Se for número, ele fica alinhado à direita.

entao ele e String pq esta alinhado a esquerda mas tipo isso influncia na parde de fazer a inserção e dar o erro q informei???

O que ocorre no seu programa é que você tem campos no banco de dados que não são VARCHAR ou CHAR, e você está usando setString com eles. O que ocorre? Depende muito do seu driver de banco de dados. Muitos drivers são meio “idiotas” e dão problemas sérios.

Em vez de fazer setString para todos os campos, veja qual é o tipo de cada um deles, e use o método adequado (setInt, setString etc.). Veja a documentação de PreparedStatement e escolha o método mais adequado.

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html

hummm!! n sou muito bom nessa parte veio!! pois ateh entaum n programa em java mas to me metendo pra aprender!! e q tipo como vc pode ver eu tenho o Buffer

depois o eu entro com o PreparedStatement

entaum eu faço um laço para ele entrar em ação

depois eh passo o arquivo passado no Buffer para uma String para ler ele linha a linha!!

entaum logo em seguinda eu crio uma vetor de strings para inserir o “;”
entre os dados

depois eu faço um for para ele para pegar todos os dados

e entaum eu seto os dados

e logo em seguinda faço u Update nos dados!!

so e q na parte ali em cima q me enrolo tipo eu fiz um setString neh
soq tipo os dados saum:
uma String, dois floats e tres int

e tipo eu teria de fazer setInt e setFloat???
eu me enrolo nisso pq ele vai pegar uma linha por linha e ainda os dados estao todos na mesma linha por isso q n consigo entender muito bem esta parte de setar os dados um usuario em falow q deveria fazer o setString dos dados e tipo antes de ter feito akilo de passar o mes para varchar atehq funcionava!!
mas agora ele da o erro q citei logo acima!!!

Verifique lá no seu arquivo csv se não está vindo valores acima de 2 dígitos para o campo mes int(2).

aqui esta o arquivo csv na seguinte ordem:

cc_custo, impressoes, valImpress, copias, valCopias e mes

e assim e para ir para o banco mas trunca no int mes
no PreparedStatement ja trokei o mes pelo valCopias e da o mesmo erro so q dai pro val Copias axo q ou e a tabela ou o csv so n sei o q!!

Adiciona lá onde é executado o stmt.executeUpdate(); o comando

e.printStackTrace()

e manda o que é exibido no log aí pra galera ver melhor em que ponto está dando o erro.

cara olha so eu usei assim logo depois do stm

o out.println(e.getMessage()); pegou ste erro

e o

pego este:

olha cara antes funcionava antes de eu mudar sabe!! dai depois q mudei e coloquei denovo como era n funcionou mais!!
e algo na tabela no campo mes ou entaum no csv isso com certeza eh!! mas n sei o q pode ser!!

É, acho que você vai ter que trocar o setString() pelo set de cada campo dependendo do seu tipo, assim como o Thingol comentou anteriormente.
Não conheço MySql por isso não vou poder te ajudar nesse sentido.

Tente assim:

[code]PreparedStatement stmt= con.prepareStatement(“INSERT INTO custos(cc_custo, impressoes, valImpress, copias, valCopias, mes) values (?, ?, ?, ?, ?, ?)”);

String linha = “”;
String[] dados = null;

while(br.ready()){
linha = br.readLine();
dados = linha.split(";");

stmt.setString(1, dados[0]);
stmt.setInt(2, Integer.parseInt(dados[1]));
stmt.setFloat(3, Float.parseFloat(dados[2]));
stmt.setInt(4, Integer.parseInt(dados[3]));
stmt.setFloat(5, Float.parseFloat(dados[4]));
stmt.setInt(6, Integer.parseInt(dados[5]));
} [/code]

A sim, e outra coisa, como você mesmo disse que voltou a versão anterior e continou dando erro é por que você está, então, executando coisa velha aí, não? Ou então, sai do fusca e entra de novo (fecha a IDE, reinicia o tomcat, refaz o deploy), sabe como é informática, não é uma ciência exata, ainda.

sei sim e ja fexei isso aki e abri umas qntas vezes e n estou usando o tomcat para testes e sim um plugin do eclipse o exadel n sei se vc conhece ele tem um tomcat embutido!!! e bem legal

mas veio fiz como vc falou e ele de este erro agora:

e deu esta execão e.printStackTrace

isso e alguma coisa relacionada com o dado 6 ou seja o mes denovo !!! n entendo veio como q isto funicinava e n funciona mais so pq alterei umas coisas mas depois deixei tudo igual!!!

O seu último elemento da linha do arquivo CSV está vindo com uma aspas (6"), daí é passado uma string ao invés de um número para o setFloat. Acho que é isso.

Verifique o arquivo e veja se não está sendo gerado errado.

Nesse comando linha.split(";") não deve ter espaço em branco antes nem depois do ponto e vírgula.

n n!! ele n tem " do lado do ultimo campo naum!!! eu inclusive passei o arquivo csv ali acima se quiser dar uma olhada eu passei ele e expliquei o q cada um significa!! e n a espaços no (";") o problema n sera no banco??? o mes pode ser int(2) ???se estou passando so um numero no csv para ele???

Naninanão…

Veja lá na mensagem de erro que foi listada pelo stacktrace

java.lang.NumberFormatException: For input string: "6"" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:4:)

A mensagem For input string: “6"” é listada com um aspas a mais, ou seja, o erro é listado dentro de aspas já, então, o 6 veio e, junto com ele, uma aspas.

Eu fiz um teste aqui e forcei esse erro da seguinte maneira:

System.out.println(Float.parseFloat("6\""));

Coloque o código acima num método main() qualquer, execute e você obterá o seguinte erro:

java.lang.NumberFormatException: For input string: "6""

Bom, posso estar enganado, mas faça um debug desse seu código, passo a passo e veja o conteúdo das variáveis.

cara era erro ao salvar o CSV eu deixava uns campos em brancos qndo passava de xls para csv e depois q eu apagava mas devia ser no Excel q deivia ser apagado mas de resto agora ta funfando so tipo ele ta dando esta Excessão ainda da uma olhada:

se souber me avisa e valew ai pela força!!

Agora é contigo.

Vá lá no diretório de instalação do tomcat, exemplo:

C:\Tomcat50\work\Catalina\localhost<SUA APLICACAO>\org\apache\jsp

e procure pelo arquivo upload_jsp.java e veja a linha 106. É nessa linha que está dando NullPointerException

Os arquivos .java/.class desse diretório são seus arquivos .JSP (no caso upload.jsp), só que agora, compilados, ok?

Veja o resultado do stacktrace,

impressoras.csv 
java.lang.NullPointerException 
at java.io.File.<init>(File.java:194) 
at org.apache.jsp.admin.upload_jsp._jspService(upload_jsp.java:106) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
....
....

Parece que é na hora de você criar uma instância da classe File, você deve estar passando algum valor null pra ela.

nao olha so em ora alguma eu passo valores nulos quando crio as instancias olha so:

se passo pelo menos n notei!!!

jpacheco, se você não cooperar, fica difícil…

Você olhou o arquivo que te falei??

Vá lá e coloca aqui um trecho do arquivo, umas linhas antes e umas linhas depois da 106.

Let’s go man…move !!!