[RESOLVIDO]Inserindo Dados em tabela PostgreSql

3 respostas
C

Olá pessoal,
é o seguinte...
to tentando adicionar alguns dados em uma tabela produtos,
já conferi os campos e tá tudo Ok.
é um projeto simples de cadastro de sapatos(produtos),
quando tento inserir o tamanho do sapato dá um erro,

Código:
try {

					Class.forName("org.postgresql.Driver");
					Connection Conexao = DriverManager.getConnection("jdbc:postgresql://localhost:5432/BDados", 
							"postgres", 
					"admin" );

					Statement FluxoSQL = Conexao.createStatement();

					String InstrucaoSQL = "INSERT INTO produtos(marca_produto , modelo_produto, cor_produto,tamanho_produto,valorUnitario_produto)VALUES ('+ tfMarca.getText()+', '+tfModelo.getText()+', '+tfCor.getText()+','+ tfTamanho.getText()+', '+tfValorUnitario.getText()+')";  
					FluxoSQL.executeUpdate (InstrucaoSQL);
					FluxoSQL.close();
					Conexao.close();
					JOptionPane.showInputDialog("Informação adicionada", "Produto Cadastrado com Sucesso");
					System.out.println(" ");
					System.out.println(" ");
					System.out.println(" ");
					System.out.println(" ");
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

Erro:
java.sql.SQLException: ERROR: invalid input syntax for integer: "+ tfTamanho.getText()+"

at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)
at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:505)
at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:320)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48)
at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:197)
at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:183)
at com.systemhaus.swing.carolina.swing.estoque.CadastroProdutos$1.actionPerformed(CadastroProdutos.java:123)

Alguém sabe o motivo desse erro?

3 Respostas

D
String InstrucaoSQL = "INSERT INTO produtos(marca_produto , modelo_produto, cor_produto,tamanho_produto,valorUnitario_produto)VALUES ('+ tfMarca.getText()+', '+tfModelo.getText()+', '+tfCor.getText()+','+ tfTamanho.getText()+', '+tfValorUnitario.getText()+')";
Sua instrução sql está bem estranha... Ela não deveria ser algo... + ou - assim:
String InstrucaoSQL = "INSERT INTO produtos(marca_produto , modelo_produto, cor_produto,tamanho_produto,valorUnitario_produto)VALUES ('"+ tfMarca.getText()+"', '"+tfModelo.getText()+"', '"+tfCor.getText()+"',"+ tfTamanho.getText()+", "+tfValorUnitario.getText()+")";
Observe também os tipos no banco... VARCHAR você "deve" colocar aspas (') mas números não...
Y

Melhor também é utilizar PreparedStatement, que no seu caso ficaria assim:

String InstrucaoSQL = "INSERT INTO produtos(marca_produto, modelo_produto, cor_produto, tamanho_produto, valorUnitario_produto) VALUES (?, ?, ?, ?, ?)";
      PreparedStatement ps = Conexao.prepareStatement(query);
      ps.setString(1, tfMarca.getText());  //Atribui o valor ao primeiro ? e assim por diante
      ps.setString(2, tfModelo.getText());
      ps.setString(3, tfCor.getText());
      ps.setInt(4, new Integer(tfTamanho.getText())); //Aqui você seta um valor numérico inteiro
      ps.setDouble(5,  new Double(tfValorUnitario.getText())); //Aqui você seta um valor numérico double
      ps.executeUpdate();
Nesse tipo de caso você utiliza ? para cada valor que precisar definir.

Se fosse o caso de um UPDATE  mudaria a posição do ?, ficando +/- assim: UPDATE produtos SET marca_produto = ? WHERE id_produto = ?;

Onde o primeiro ? seria definido com ps.setString(1, tfMarca.getText()); e o segundo com ps.setInt(2, new Integer(tfIdProduto.getText()));

[]´s

Daniel

C

Valeuu pessoal

:smiley:

Criado 22 de setembro de 2009
Ultima resposta 22 de set. de 2009
Respostas 3
Participantes 3