Erro ao mandar dados de uma jtable para uma tabela do banco de dados

6 respostas
samea

Eu criei uma classe para pegar os dados de uma tabela e inserir esses registros dentro da tabela no banco de dados pra isso eu ja tentei criar varias classes na verdade, bom mas essa aqui é uma das classes que eu criei:

package aguas.amazonas;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;

public class EnviaBanco implements ActionListener{

	private String Drive = "oracle.jdbc.OracleDriver";
	private String URL= "endereco do banco de dados";
	private String USARNAME = "usuario";
	private String PASSWORD = "senha";
	private Connection conn;
	private JScrollPane     js;

	public static DefaultTableModel recebeTestec;

	public static ArrayList<cliente> listacliente;

	public EnviaBanco(){
        try{
        	Class.forName(this.Drive);
        	this.conn = DriverManager.getConnection(URL, USARNAME, PASSWORD);

    	} catch (ClassNotFoundException e){
            System.out.println("Não foi possivel encontrar o driver de banco: " + e.getMessage());
        } catch(SQLException e){
            System.out.println("Erro ao conectar com o banco: " + e.getMessage());
        }


	try{
              	  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                  String url = "endereco do banco";
                  this.conn = DriverManager.getConnection (url, "usuario", "senha");
                  Statement st = conn.createStatement();
                  System.out.println("Conectado");
              	  
                  System.out.println("Consultando");

                  List listacliente = new ArrayList<cliente>();  // Lista de conjunto de clientes que vai receber o resultado da sua consulta.
                                 	
                  		clienteDepoisConsulta c = new clienteDepoisConsulta();
                  		Principal p = new Principal();


                      	System.out.println(c.getNome());

                      	for (int i=0; i < Principal.table.getColumnCount(); i++){
                   			
                   			System.out.println("teste");
                   			String sql = "INSERT INTO SAMEA_SPC (SPC_NOME_CLIENTE,SPC_ENDERECO_CLIENTE,SPC_CPF, SPC_CGC, SPC_BAIRRO, SPC_CEP, SPC_TELEFONE, SPC_DATA_VENCIMENTO, SPC_DATA_COMPRA, SPC_VALOR_DEBITO, SPC_CODIGO_PROGRAMA, SPC_NUM_LIGACAO)"+" VALUES ('"+p.table.getColumnName(0).toString()+"',"+p.table.getColumnName(1).toString()+",'"+p.table.getColumnName(2).toString()+"',"+p.table.getColumnName(3).toString()+"',"+p.table.getColumnName(4).toString()+"',"+p.table.getColumnName(5).toString()+"',"+p.table.getColumnName(6).toString()+"',"+p.table.getColumnName(7).toString()+"',"+p.table.getColumnName(8).toString()+","+p.table.getColumnName(9).toString()+"',"+p.table.getColumnName(10).toString()+"',"+p.table.getColumnName(11).toString()+"'"; // ja tentei desse jeito e do jeito da linha abaixo
                   			//String sql = "INSERT INTO SAMEA_SPC (SPC_NOME_CLIENTE,SPC_ENDERECO_CLIENTE,SPC_CPF, SPC_CGC, SPC_BAIRRO, SPC_CEP, SPC_TELEFONE, SPC_DATA_VENCIMENTO, SPC_DATA_COMPRA, SPC_VALOR_DEBITO, SPC_CODIGO_PROGRAMA, SPC_NUM_LIGACAO)"+" VALUES ('"+p.table.getValueAt(0,0).toString()+"',"+p.table.getValueAt(1, 1).toString()+",'"+p.table.getValueAt(2, 2).toString()+"',"+p.table.getValueAt(3, 3).toString()+"',"+p.table.getValueAt(4, 4).toString()+"',"+p.table.getValueAt(5, 5).toString()+"',"+p.table.getValueAt(6,6).toString()+"',"+p.table.getValueAt(7,7).toString()+"',"+p.table.getValueAt(8, 8).toString()+","+p.table.getValueAt(9, 9).toString()+"',"+p.table.getValueAt(10, 10).toString()+"',"+p.table.getValueAt(11,11).toString()+"'";
                   			System.out.println("teste2");
                   			st.executeQuery( sql );
                 			
                 			System.out.println("teste3");

                 	
                  	st.close();
                  	conn.close();

                  	// Tira todas as linhas da tabela.                                 
                 
          		}
                  	
                      //mensagem de erro para quando ocorrer problemas na conexao com o banco de dados
                 	}catch(SQLException e1){
                       System.out.println("Erro ao conectar ao banco");
                       e1.printStackTrace();

					}finally{ // Finalizando a conexão
                       System.out.println("Encerrando a conexão");

                  }



	}

		public static JButton main(String[] args) {
			EnviaBanco app = new EnviaBanco();
	        String url = "endereco do banco";
	        //app.show();
			return null;



		}

		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
		}
}
Quando eu rodo apos a consulta no banco de dados, ou seja apos a tabela esta preenchida da os seguintes erros: Conectado Consultando null teste teste2
Erro ao conectar ao banco
java.sql.SQLException: ORA-00917: missing comma

	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
	at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
	at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1272)
	at aguas.amazonas.EnviaBanco.<init>(EnviaBanco.java:67)
	at aguas.amazonas.EnviaBanco.main(EnviaBanco.java:94)
	at aguas.amazonas.Principal.actionPerformed(Principal.java:226)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Encerrando a conexão

Alguem sabe me dizer o que esta errado na minha classe por que eu não sei se é isso aqui :

st.executeQuery( sql );

que eu tenho que mandar execultar, por favor me ajudem! :oops:

6 Respostas

sf.marcius

não sei se é só isso, mas logo após “VALUES” vc abriu um parenteses que nao foi fechado no final do sql…
mas… não seria melhor (mais fácil) usar PreparedStatement???

[]s

Pedrosa

Como o amigo disse use PreparedStatement, dica imprima o conteudo da String sql que vc monta a query e tente rodar direto no banco.

andrelrm

Não sei, mas pode ser isto:

“+” VALUES (’"+p.table.getColumnName(0).toString()+"’,"+p.table.getColumnName(1).toString()+",…

de um espaço após o value e feche-o dentro de aspas da seguinte forma

" insert into tabelaa " +
" (campo1,campo2) " +
" values " +
“( " + parametro1 + " , " + parametro2 + " )”

de um espaço entre os strings para que na hora de rodar a query o string não fique assim : inserti into tabelaa (campo1,campo2)VALUES(

“OLHE COMO FICOU JUNTO”

mas se possível use PreparedStatement??? é mais eficaz

André Luiz

fmad27

Samea,

segue um exemplo do Statement, ele é bem mais seguro do que passar os valores diretamente na query e fica bem mais legível;

PreparedStatement stm = connection.prepareStatement(“INSERT INTO SAMEA_SPC (SPC_NOME_CLIENTE,SPC_ENDERECO_CLIENTE,SPC_CPF, SPC_CGC, SPC_BAIRRO, SPC_CEP, SPC_TELEFONE, SPC_DATA_VENCIMENTO, SPC_DATA_COMPRA, SPC_VALOR_DEBITO, SPC_CODIGO_PROGRAMA, SPC_NUM_LIGACAO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)”);

stm.setString(0, p.table.getColumnName(0).toString());

stm.setString(0, p.table.getColumnName(1).toString());

stm.setString(0, p.table.getColumnName(2).toString());

stm.setString(0, p.table.getColumnName(3).toString());

stm.setString(0, p.table.getColumnName(4).toString());

stm.setString(0, p.table.getColumnName(5).toString());

stm.setString(0, p.table.getColumnName(6).toString());

stm.setString(0, p.table.getColumnName(7).toString());

stm.setString(0, p.table.getColumnName(8).toString());

stm.setString(0, p.table.getColumnName(9).toString());

stm.setString(0, p.table.getColumnName(10).toString());

stm.setString(0, p.table.getColumnName(11).toString());

stm.execute();

JAVADRIANO

Com certeza, com o uso do prepared statment é mais seguro e o codigo mais organizado o que facilita na manutenção… :wink:

sf.marcius

também recomendaria usar um StringBuilder pra criar o comando sql de uma forma mais clara…

PreparedStatement stm;
StringBuilder builder = new StringBuilder();
builder.append("INSERT INTO SAMEA_SPC ( ");
builder.append("    SPC_NOME_CLIENTE, ");
builder.append("    SPC_ENDERECO_CLIENTE, ");
builder.append("    SPC_CPF, ");
builder.append("    SPC_CGC, ");
builder.append("    SPC_BAIRRO, ");
builder.append("    SPC_CEP, ");
builder.append("    SPC_TELEFONE, ");
builder.append("    SPC_DATA_VENCIMENTO, ");
builder.append("    SPC_DATA_COMPRA, ");
builder.append("    SPC_VALOR_DEBITO, ");
builder.append("    SPC_CODIGO_PROGRAMA, ");
builder.append("    SPC_NUM_LIGACAO ");
builder.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");

stm = connection.prepareStatement(builder.toString());
stm.setString(1, p.table.getColumnName(0).toString());
stm.setString(2, p.table.getColumnName(1).toString());
stm.setString(3, p.table.getColumnName(2).toString());
stm.setString(4, p.table.getColumnName(3).toString());
stm.setString(5, p.table.getColumnName(4).toString());
stm.setString(6, p.table.getColumnName(5).toString());
stm.setString(7, p.table.getColumnName(6).toString());
stm.setString(8, p.table.getColumnName(7).toString());
stm.setString(9, p.table.getColumnName(8).toString());
stm.setString(10, p.table.getColumnName(9).toString());
stm.setString(11, p.table.getColumnName(10).toString());
stm.setString(12, p.table.getColumnName(11).toString());

[]s

Criado 19 de março de 2009
Ultima resposta 19 de mar. de 2009
Respostas 6
Participantes 6