[RESOLVIDO]Inserir data default no mysql usando jdbc

21 respostas
dcorteztec

Bom dia amigos ,

o problema é o seguinte o sistema já estava pronto o cliente pediu para colocar data de casamento só que nem todo mundo é casado então mysql não deixa inserir campo nulo na coluna de tipo data, pesquisei se tinha como inserir o dado default se eu não inserir nada
tem como fazer isso estou usando struts e jdbc puro
Método que adiciona

public void adiciona(Cadastro cadastro) throws SQLException,
			FileNotFoundException {
		PreparedStatement statement = connection
				.prepareStatement("INSERT INTO cad_membro (NOME_CAD,END_CAD,BAIRRO_CAD,CIDADE_CAD,"
						+ "UF_CAD,CEP_CAD,TEL_CAD,TELTRAB_CAD,NASC_CAD,PROF_CAD,ESTACIV_CAD,"
						+ "DATACAS_CAD,NFILHOS_CAD,NOMECONJ_CAD,MEMBCONJ_CAD,OUTRAIGRE_CAD,BATISNASG_CAD,FUNCAO_CAD,EMAIL_CAD,DATAENT_CAD,IMAGEM_CAD,NASCONJ_CAD,SEXO_CAD,"
						+ "TIPO_CAD1,TIPO_CAD2,TIPO_CAD3,"
						+ "TIPO_CAD4,OBS_CAD,DATARENOV_CAD,FUNCAO2_CAD,FUNCAO3_CAD,CELULAR_CAD"
						+ ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
		statement.setString(1, cadastro.getNome());
		statement.setString(2, cadastro.getEndereco());
		statement.setString(3, cadastro.getBairro());
		statement.setString(4, cadastro.getCidade());
		statement.setString(5, cadastro.getUf());
		statement.setInt(6, cadastro.getCep());
		statement.setInt(7, cadastro.getTelefone());
		statement.setInt(8, cadastro.getTeltrab());
		statement.setDate(9, cadastro.getNascimento());
		statement.setString(10, cadastro.getProfissao());
		statement.setString(11, cadastro.getEstcivil());
		statement.setString(12, cadastro.getDatacas());
		statement.setInt(13, cadastro.getNfilhos());
		statement.setString(14, cadastro.getConjuge());
		statement.setString(15, cadastro.getMembroigreja());
		statement.setString(16, cadastro.getOutraigreja());
		statement.setDate(17, cadastro.getBatismo());
		statement.setString(18, cadastro.getFuncao());
		statement.setString(19, cadastro.getEmail());
		statement.setDate(20, cadastro.getDataent());
		statement.setString(21, cadastro.getImagem());
		statement.setString(22, cadastro.getNasconj());
		statement.setString(23, cadastro.getSexo());
		statement.setString(24, cadastro.getTipocad1());
		statement.setString(25, cadastro.getTipocad2());
		statement.setString(26, cadastro.getTipocad3());
		statement.setString(27, cadastro.getTipocad4());
		statement.setString(28, cadastro.getObservacao());
		statement.setDate(29, cadastro.getDatarenov());
		statement.setString(30, cadastro.getFuncao2());
		statement.setString(31, cadastro.getFuncao3());
		statement.setInt(32, cadastro.getCelular());
		statement.execute();
		statement.close();
	}

21 Respostas

xjunior

é qual tipo de campo?
datetime, timestamp ou time, ou date?
coloca tudo zero, tipo 0000-00-00

dcorteztec

tipo date eu botei valor 1111-11-11 só que quando executa o mysql reclama que valor esta " "

xjunior

vai na estrutura dele e altera pra campo default o 0000-00-00, e se vc não inserir nada ou este valor ele vai colocar isso

xjunior

altera o campo Data para receber nullo:

ou

Para inserir um campo data com nullo

xjunior

Fez e Deu certo?

dcorteztec

Não deu certo vou postar o erro

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: ‘’ for column ‘DATACAS_CAD’ at row 1

xjunior

posta aqui a estrutura da sua tabela, e aliás, qual versão do driver jdbc ce tá utilizando?

dcorteztec

mysql-connector-java-5.1.6-bin.jar

CREATE TABLE `cad_membro` ( `NUM_CAD` int(10) unsigned NOT NULL AUTO_INCREMENT, `NOME_CAD` varchar(255) NOT NULL DEFAULT '', `END_CAD` varchar(255) NOT NULL DEFAULT '', `BAIRRO_CAD` varchar(255) NOT NULL DEFAULT '', `CIDADE_CAD` varchar(45) NOT NULL DEFAULT '', `UF_CAD` varchar(45) NOT NULL DEFAULT '', `CEP_CAD` int(10) unsigned NOT NULL DEFAULT '0', `TEL_CAD` int(10) unsigned DEFAULT '0', `TELTRAB_CAD` int(10) unsigned DEFAULT '0', `NASC_CAD` date NOT NULL DEFAULT '0000-00-00', `PROF_CAD` varchar(255) NOT NULL DEFAULT '', `ESTACIV_CAD` varchar(45) NOT NULL DEFAULT '', `DATACAS_CAD` date DEFAULT '0000-00-00', `NFILHOS_CAD` int(10) unsigned DEFAULT '0', `NOMECONJ_CAD` varchar(255) DEFAULT NULL, `NASCONJ_CAD` date DEFAULT '0000-00-00', `MEMBCONJ_CAD` varchar(45) DEFAULT NULL, `OUTRAIGRE_CAD` varchar(255) DEFAULT NULL, `BATISNASG_CAD` date NOT NULL DEFAULT '0000-00-00', `FUNCAO_CAD` varchar(255) NOT NULL DEFAULT '', `EMAIL_CAD` varchar(45) NOT NULL DEFAULT '', `DATAENT_CAD` date NOT NULL DEFAULT '0000-00-00', `IMAGEM_CAD` varchar(255) NOT NULL, `SEXO_CAD` varchar(45) NOT NULL, `TIPO_CAD1` varchar(45) DEFAULT NULL, `TIPO_CAD2` varchar(45) DEFAULT NULL, `TIPO_CAD3` varchar(45) DEFAULT NULL, `TIPO_CAD4` varchar(45) DEFAULT NULL, `OBS_CAD` varchar(500) DEFAULT NULL, `DATARENOV_CAD` date NOT NULL, `FUNCAO2_CAD` varchar(45) DEFAULT NULL, `FUNCAO3_CAD` varchar(45) DEFAULT NULL, `CELULAR_CAD` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`NUM_CAD`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

xjunior

e tente mudar sua instrução de data para a seguinte:

String outraData;
String dataAnalisar;
dataAnalisar = cadastro.getDataent();
outraData = (dataAnalisar.equals("") || dataAnalisar==null)?"":dataAnalisar;
statement.setDate(20, outraData);
xjunior

ou então mude para:

String outraData;
String dataAnalisar;
dataAnalisar = cadastro.getDataent();
outraData = (dataAnalisar.equals("") || dataAnalisar==null)?"0000-00-00":dataAnalisar;
statement.setDate(20, outraData);
xjunior

deu certo?

xjunior

observa também qual o padrão que tá vindo como entrada…

xjunior

Você viu que na estrutura da sua tabela os dados não aceitam nullo, se quiser que eles aceitam, vc terá que mudar a estrutura da sua tabela, assim pode usar o código que postei lá em cima…

//Um exemplo do seu código, viu como ele está [b]NOT NULL[/b] 
`DATAENT_CAD` date NOT NULL DEFAULT '0000-00-00',
dcorteztec

Mas essa coluna DATAENT_CAD não tem problema o problema são essas duas

`DATACAS_CAD` date DEFAULT '0000-00-00',

porque aniversário todo mundo tem

xjunior

bom amigo, já que vc tá tendo um monte de problemas, faça um teste, mude o tipo do campo para varchar e testa se está inserindo, caso não insira, vamos ver o que está acontecendo mais a fundo, ok?

xjunior

aliás vc tinha feito as alterações no código que falei, em todos os campos que precisam de data?

xjunior

e então, deu certo::??

dcorteztec

Se eu trocar para varchar inseri na boa mas quando for fazer busca tipo beteween entre as datas da problema?

dcorteztec

AMIGO MUITO OBRIGADO

EU ESTAVA TRABALHANDO e não deu tempo para testar direito depois eu fiz direito (Muita gente pedido relatório vlw)

String outraData;  
String dataAnalisar;  
dataAnalisar = cadastro.getDataent();  
outraData = (dataAnalisar.equals("") || dataAnalisar==null)?"0000-00-00":dataAnalisar;  
statement.setDate(20, outraData);

MUITO OBRIGADO!!!

xjunior

Ok brother, precisando é só falar…

xjunior

Bom que vc conseguiu resolver de uma maneira mais primorosa, mas se vc fizesse da outra forma, o beteween serve pra ver se está entre, tanto com datas, numeros e até string, então creio que daria certo, ou vc pode tentar uma conversão explicita para data.

Criado 4 de fevereiro de 2010
Ultima resposta 5 de fev. de 2010
Respostas 21
Participantes 2