* JDBC atualizável erro

[i]Olá galera!!!

Estou fazendo uma aplicação para teste usando JDBC e mysql!

Preciso fazer um resultset atualizável e tal, quando vou incluir um registro ele me exibe o seguinte erro no console do eclipse:[/i]

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'Uf' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665) at com.mysql.jdbc.Connection.execSQL(Connection.java:3176) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1404) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1318) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1303) at com.mysql.jdbc.UpdatableResultSet.insertRow(UpdatableResultSet.java:729) at br.com.edson.JTable.QueryModel.addRow(QueryModel.java:88) at br.com.edson.JTable.CadastroDAO.actionPerformed(CadastroDAO.java:53) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:5488) at javax.swing.JComponent.processMouseEvent(JComponent.java:3126) at java.awt.Component.processEvent(Component.java:5253) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3955) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1778) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Segue a tabela no mysql

create table Cliente ( id_cli int unsigned not null primary key auto_increment, Nome varchar(50) not null, Sexo char(1) not null, Uf char(2) not null, DataCli date, Ativo char(1) not null );

Obrigado!

Oi,

Não conseguiu identificar o erro? Você tá tentando inserir um valor maior do que a coluna suporta…verifique no momento que você realiza o insert qual o valor para a coluna Uf, com certeza tá maior que dois caracteres.

ps. Caso realmente não ache o problema terá que postar seu código aqui.

Passa o insert.

Parece que no campo Uf o tamanho do dado que vc esta inserindo e maior que um char(2).

Não consigo achar o erro, debuguei aqui e ele está dando erro no tipo do tamanho inserido no campo uf nesse método aqui

public void addRow(Object[] linha) { try { rs.moveToInsertRow(); for (int cont = 0; cont < linha.length; cont++) { rs.updateObject(cont + 2, linha[cont]); } rs.insertRow(); //Atualiza a tabela fireTableDataChanged(); } catch (SQLException e) { e.printStackTrace(); } }

Seguem as classes

[code]package br.com.edson.JTable;

import javax.swing.table.;
import java.sql.
;

public class QueryModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;

private ResultSet 		  rs;
private ResultSetMetaData estrutura;

public QueryModel(ResultSet rs) {
	this.rs = rs;
	try {
		estrutura =  rs.getMetaData();
		rs.first();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}
public int getColumnCount() {
	int qtdColunas = 0;
	try {
		qtdColunas = estrutura.getColumnCount();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return qtdColunas;
}
public int getRowCount() {
	int qtdLinhas = 0;
	int linhaCorrente = 1;
	try {
		linhaCorrente = rs.getRow();
		rs.last();
		qtdLinhas = rs.getRow();
		if (linhaCorrente > 0) {
			rs.absolute(linhaCorrente);
		}
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return qtdLinhas;
}

public Object getValueAt(int linha, int coluna) {
	Object valor = null;
	try {
		rs.absolute(linha + 1);
		valor = rs.getObject(coluna + 1);
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return valor;
}
public String getColumnName(int coluna) {
	String nomeColuna = "";
	try {
		nomeColuna = estrutura.getColumnName(coluna + 1);
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return nomeColuna;
}
public void setValueAt(Object value, int linha, int coluna) {
	try {
		rs.absolute(linha + 1);
		rs.updateObject(coluna + 1, value);
		rs.updateRow();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}
public boolean isCellEditable(int linha, int coluna) {
	//Coluna Id não deve ser editável
	if (coluna == 0) {
		return false;
	}
	return true;
}
public void addRow(Object[] linha) {
	try {
		rs.moveToInsertRow();
		for (int cont = 0; cont < linha.length; cont++) {
			rs.updateObject(cont + 2, linha[cont]);
		}
		rs.insertRow();
		//Atualiza a tabela
		fireTableDataChanged();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}
public void removeRow(int linha) {
	try {
		rs.absolute(linha + 1);
		rs.deleteRow();
		//Atualiza a tabela
		fireTableRowsDeleted(linha, linha);
	} catch (SQLException e) {
		e.printStackTrace();
	}
}

}
[/code]


[code]package br.com.edson.JTable;

import java.sql.;
import javax.swing.
;
import java.awt.event.*;

public class CadastroDAO extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;

private JTable 		tabela;
private QueryModel  modelo;
private Connection  con;
private ResultSet   rs;
private JButton 	btnIncluir, btnExcluir;

public CadastroDAO() {
	try {
		Class.forName("com.mysql.jdbc.Driver");
		String url = "jdbc:mysql://192.168.0.253:3306/BarTeste";
		con = DriverManager.getConnection(url, "synap", "synap");
		Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		rs = st.executeQuery("SELECT id_cli, Nome, Sexo, Uf, DataCli, Ativo from Cliente");
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	modelo = new QueryModel(rs);
	tabela = new JTable(modelo);
	JScrollPane sp = new JScrollPane(tabela);
	add(sp, "Center");

	btnIncluir = new JButton("Incluir");
	btnIncluir.addActionListener(this);
	btnExcluir = new JButton("Excluir");
	btnExcluir.addActionListener(this);
	JPanel pBtn = new JPanel();
	pBtn.add(btnIncluir);
	pBtn.add(btnExcluir);
	add(pBtn, "South");

	pack();
	setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
	Object btn = evt.getSource();
	if (btn == btnIncluir) {
		Object dados[] = new Object[5];
		dados[0] = JOptionPane.showInputDialog("Qual o nome?");
		dados[1] = JOptionPane.showInputDialog("Qual o sexo?");
		dados[2] = JOptionPane.showInputDialog("Qual a data?");
		dados[3] = JOptionPane.showInputDialog("Qual o estado?");
		dados[4] = new Boolean(JOptionPane.showInputDialog("Está ativo?"));
		modelo.addRow(dados);
	} else if (btn == btnExcluir) {
		if (tabela.getSelectedRowCount() == 0) {
		   JOptionPane.showMessageDialog(this, "Não há linhas selecionadas");
		} else {
			int linhas[] = tabela.getSelectedRows();
			for (int cont = linhas.length - 1; cont >= 0; cont--) {
				modelo.removeRow(linhas[cont]);
			}
		}
	}
}
public static void main(String[] args) {
	new CadastroDAO();
}

}

[/code]

A mensagem continua a mesma galera, se puderem identificar essa mensagem, como postei antes, o método que dá a excecção é o addRow();

Obrigado

rs.updateObject(cont + 2, linha[cont]);  

if (linha[cont] instanceof String) {

rs.updateObject(cont + 2, ((String) linha[cont]).trim());  

} else {

rs.updateObject(cont + 2, linha[cont]);  

}

Eu acho que com um trim vc solucionaria.

Caro Sigma, nada meu velho!!!

Implementei essa condição, mas nada …

Será que alguém já passou por isso, está claro que o tamanho do dado que está populando esse campo está maior, mas como pode isso, se alguém souber a resposta ou já tiver passado por isso me dê um auxílio!

Obrigado ;;;

vlw sigma

Mas o codigo entra no if da String?

Debuga e ve o antes o depois do .trim(), cara tem que ser isso

Eu acho que quando vc pega do Jtable ele completa com espaço.

Cara, debuguei, ele entra sim no if da implementação, mas permanece com o mesmo erro!!!

Quando ele vai inserir rs.insertRow(), dá o erro

Ainda continuo com essa dúvida

vlw