Problemas com inserção em Banco de Dados

7 respostas
felipereisbr

Olá pessoal, estou desenvolvendo uma aplicação em que elvolve cadastros de funcionários, esta está sendo feita com JSP e Servlet e Firebird 1.5.

É o seguinte, estou tendo problemas com a ordem em que as
variáveis são colocadas como parâmetro no método de inserção
( inserirFuncionario()), dependendo desta ordem ele me gera erros dos campos como: data no campo errado(00/00/0000),etc…

Mesmo seguinte a ordem ele continua dando erros na hora da inserção.
AcessoDadosFuncionario.inserirFuncionario

public static int[] inserirFuncionario(String nome, String sobrenome, String data,
String email, String rg, String cpf, String telefone,String senha,String sexo) throws Exception {
		
		
	Funcionario f = new Funcionario();
	Endereco e = new Endereco();
	
		int[] linhas = null;
			
	stmt = getStatement();  
	System.out.println("passou aki 2 ");  
	stmt.addBatch("INSERT INTO funcionarios " +
	    	" (func_nome,func_sobrenome,func_data,func_rg,func_cpf,func_sexo,func_telefone,func_senha,func_email)" +
	    	"VALUES ('"+nome"','"+sobrenome+"','"+data+"','"+email+"','"+rg+"'," +
	    			"'"+cpf','"+telefone+"','"+senha+"','"+senha+"')");
	

	
	linhas = stmt.executeBatch();
	System.out.println("passou aki");   
	
	
       
 
    con.commit();
    con.setAutoCommit(true);
    stmt.close();
    con.close();


	
	return linhas;
}

Teste de inserção

public static void main (String args[]){
	
	  
	        String nomeFunc= "Felipe";
			String sobrenomeFunc = "Reis";
			String dataFunc= "26/02/2006";
			String emailFunc= "[email removido]";
			String rgFunc = "[telefone removido]";
			String cpfFunc = "[telefone removido]";
			String telefoneFunc = "[telefone removido]";
			String senhaFunc = "Reis";
			String sexoFunc = "s";
				
			try {
				AcessoDadosFuncionario.inserirFuncionario(nomeFunc,sobrenomeFunc,dataFunc,emailFunc,rgFunc,cpfFunc,telefoneFunc,senhaFunc,sexoFunc);
			}  catch (Exception e2) {
			System.out.println("deu erro");
				e2.printStackTrace();
			}
			
	
}

ERROS:

passou aki 2 
deu erro
java.sql.BatchUpdateException: conversion error from string "26/02/2006"
	at org.firebirdsql.jdbc.AbstractStatement.executeBatch(AbstractStatement.java:982)
	at br.com.estacio.faculdade.base.AcessoDadosFuncionario.inserirFuncionario(AcessoDadosFuncionario.java:247)
	at br.com.estacio.faculdade.dominios.CadastroFuncionario.main(CadastroFuncionario.java:115)

Grato Reis

7 Respostas

bzy

Já vi erro que era por causa do formato do campo DATE do BD, tenta Mês/Dia/Ano.

cv1

Erro classico: http://en.wikipedia.org/wiki/SQL_Injection

felipereisbr

Olá, ajustei esse detalhe já , mas agora ele da outro erro,

passou aki 2 
deu erro
java.sql.BatchUpdateException: arithmetic exception, numeric overflow, or string truncation
	at org.firebirdsql.jdbc.AbstractStatement.executeBatch(AbstractStatement.java:982)
	at br.com.estacio.faculdade.base.AcessoDadosFuncionario.inserirFuncionario(AcessoDadosFuncionario.java:247)
	at br.com.estacio.faculdade.dominios.CadastroFuncionario.main(CadastroFuncionario.java:115)

Tipo si eu mudar os valores todos para 1 caracter só b, [/b]ele inseri, mas se eu inserir uma “string” b[/b] maior ele da o erro acima.

minha tabela do bd ta assim :

func_nome: varchar(50)
func_sexo: Char(1)
func_senha: varchar(12)
func_cpf: varchar(11)
func_rg: varchar(10)
func_email: varchar(150)
func_data: DATE
func_sobrenome: varchar(25)

felipereisbr

Os valores dos campos não estão obedecendo, tipo…

o campo “email” que tem até(150) está entrando no lugar do campo cpf que tem só (11)… daí ele gera essas exeções… pois eu insiro um email
(20 caracteres)… e ele tenta colocar no campo cpf ( 12 caracteres).

aguardo ajuda !!

felipereisbr
Erro classico: http://en.wikipedia.org/wiki/SQL_Injection

Porfavor explicite melhor !! vlw

Pedrosa

Cara use PreparedStament o driver faz todo esse servico sujo por vc:

strSQL = "SELECT autoanswer FROM LOGIN where login = ?";
PreparedStatement stmt = this.connection.prepareStatement(strSQL);
//aqui vc seta o tipo e o valor para os ?
stmt.setString(1, login);

Note que nem precisa se preocupar com as aspas e sql injection,

Exemplo de sql injection:

‘or’1’='1 em paginas asp se o programador nao tratar aspas simples o caminho esta aberto para invasao, aquele comando pegua o primeiro registro do bd.

fabio.nascimento

Cara seguinte, vai pela dica do pedrosa.

Eu tava tendo essas porcar… aqui tbm , uso banco oracle 7.2, tinha criado uma classe com meus sqls e tal, mas sem chance tive que alterar todas com prepareStatement e aí rolou que foi uma beleza, ele cuida em muitas vezes até do formato de sua data.

Té +

Fabio Nascimento

Criado 10 de outubro de 2006
Ultima resposta 11 de out. de 2006
Respostas 7
Participantes 5