Pessoal, eu tenho uma tabelaModelo…onde faco a conexao e passo os parametros (tabela,campos,criterios) e a tabela retorna as colunas e as linhas…e monta a tabela.
o que esta acontecendo eh que quando passo criterio para me mostrar um registro…por exemplo: id_cliente=15…ele me retorna uma linha…ateh ai beleza…mas quando peco para ele me mostrar todos os registros da tabela…dah pau…
mostra essa mensagem de erro:
115 - eu sei que ele esta varrendo a tabela pq aqui mostra o numero de linhas da tabela...
erro em RetornarLinhas: Invalid character data was found. This is most likely caused by stored data containing characters that are invalid for the character set the database was created in. The most common example of this is storing 8bit data in a SQL_ASCII database.
Abaixo segue o codigo da tabela:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
/**
* Esta classe extende de um objeto swing JTable, tornando-o em um objeto que
* permite pegar dados de uma várias tabelas de um ou mais bancos de dados.
*
* @version 1.0 21/04/2004
* @author heber
* @see javax.swing.JTable
*/
public class TableModelo extends JTable {
private Object[] col;
private Object[][] lin;
Connection conn=null;
/**
* Construtor Padrão
*/
public TableModelo() {
Conexao();
}
public void Conexao () {
String dbdriver = "org.postgresql.Driver";
String url = "jdbc:postgresql://200.215.114.175/servicos?charset=WIN1256"; //ISO8859-1
String dbuser = "msitec";
String dbpass = "ms340101";
try{
Class.forName(dbdriver);
conn=DriverManager.getConnection(url,dbuser,dbpass);
System.out.println("Banco conectado pelo gerenciador");
}catch (Exception e)
{
System.out.println("Banco não conectado !!");
}
}
/**
* Construtor que se conecta ao Banco de Dados e mostra uma pesquisa
* @param tabelas tabelas que serão consultadas
* @param campos campos que serão mostrados na table
* @param criterios critérios da pesquisa
* @see java.sql
*/
public TableModelo(String tabelas,String campos,String criterios) {
Conexao();
lin = retornarLinhas(tabelas, campos, criterios);
col = retornarColunas(tabelas, campos, criterios);
createModel();
super.setVisible(true);
}
/**
* Retorna o nome das colunas
* @param tabelas tabelas que serão pesquisadas
* @param campos campos que serão retornados
* @param criterios parâmetros da cláusula WHERE, ex.: "COD = 001"
* @return obj[] Nome das colunas
* @see java.sql.ResultSet
*/
private Object[] retornarColunas(String tabelas,
String campos, String criterios) {
String query = "SELECT " + campos + " FROM " + tabelas;
if (criterios.length() > 0) query = query + " WHERE " + criterios;
Statement s;
ResultSet rs;
ResultSetMetaData rsmd;
Object obj[] = null;
try {
s = conn.createStatement();
s.executeQuery(query);
rs = s.getResultSet();
rsmd = rs.getMetaData();
obj = new Object[rsmd.getColumnCount()];
for (int i = 1; i <= obj.length; i++) {
obj[i - 1] = rsmd.getColumnName(i);
}
} catch (Exception ex) {
System.out.println("RetornarColunas: " + ex);
}
return (obj);
}
public String[] retornarTipoColunas(String tabelas,String campos,String criterios){
String query = "SELECT " + campos + " FROM " + tabelas;
if (criterios.length() > 0) query = query + " WHERE " + criterios;
String [] tipo = null;
Statement s;
ResultSet rs;
ResultSetMetaData rsmd;
try{
s=conn.createStatement();
s.executeQuery(query);
rs=s.getResultSet();
rsmd=rs.getMetaData();
tipo=new String[20];
for(int i=0;i<=rsmd.getColumnCount();i++){
tipo[i]=rsmd.getColumnTypeName(i+1);
System.out.println(tipo[i]);
}
}catch(SQLException ex){
System.out.println("Erro tipo:"+ex);
}
return tipo;
}
/**
* A JTable usa a classe de coluna para descobrir como formatar a
* celula. Esse metodo descobre o tipo do SQL.
* @return a classe JAVA para coluna
*/
/**
* Retorna toda a pesquisa
* @param tabelas tabelas que serão pesquisadas
* @param campos campos que serão retornados
* @param criterios parâmetros da cláusula WHERE, ex.: "COD = 001"
* @return obj[][] conteúdo das pesquisas
* @see java.sql.ResultSet
*/
private Object[][] retornarLinhas(String tabelas,
String campos, String criterios) {
String query = "SELECT " + campos + " FROM " + tabelas;
if (criterios.length() > 0) query = query + " WHERE " + criterios;
Statement s;
ResultSet rs;
ResultSetMetaData rsmd;
Object obj[][] = null;
String []tipo=null;
try {
s = conn.createStatement();
s.executeQuery(query);
rs = s.getResultSet();
rsmd = rs.getMetaData();
int totalLinhas = retornarCount(query);
System.out.println(totalLinhas);
if (totalLinhas <= 0) {
obj = new Object[1][1];
obj[0][0] = "ERRO: Nenhuma linha afetada";
return (obj);
}
obj = new Object[totalLinhas][rsmd.getColumnCount()];
int i = 0;
while (rs.next()) {
Object obj2[] = new Object[rsmd.getColumnCount()];
for (int j = 1; j <= rsmd.getColumnCount(); j++) {
if(rsmd.getColumnTypeName(j).equals("varchar"))
obj2[j-1]=rs.getString(j);
if(rsmd.getColumnTypeName(j).equals("int4"))
obj2[j-1]=""+rs.getInt(j);
if(rsmd.getColumnTypeName(j).equals("date"))
obj2[j-1]=rs.getDate(j);
if(rsmd.getColumnTypeName(j).equals("boolean"))
obj2[j-1]=""+rs.getBoolean(j);
if(rsmd.getColumnTypeName(j).equals("time"))
obj2[j-1]=rs.getTime(j);
}
obj[i] = obj2;
i++;
}
}catch (SQLException ex) {
System.out.println("erro em RetornarLinhas: " + ex);
obj = new Object[1][1];
obj[0][0] = "ERRO: " + ex;
return (obj);
}
return (obj);
}
/**
* Conta a quantidade de linhas retornadas da pesquisa
* @param query instrução sql
* @return quant quantidade de linhas
* @see java.sql.ResultSet
*/
private int retornarCount(String query) {
Statement s;
ResultSet rs;
int quant = 0;
try {
s = conn.createStatement();
s.executeQuery(query);
rs = s.getResultSet();
while (rs.next()) {
quant++;
}
} catch (Exception ex) {
System.out.println("RetornarCount: " + ex);
return (0);
}
return (quant);
}
/**
* Insere linhas na Tabela
* @param quant quantidade de linhas que serão adicionadas
*/
public void insertRows(int quant) {
Object[][] obj = lin;
lin = new Object[obj.length + quant][col.length];
for (int i = 0; i < lin.length; i++) {
if (i < obj.length) {
lin[i] = obj[i];
} else {
for (int j = 0; j < lin[i].length; j++) {
lin[i][j] = " ";
}
}
}
createModel();
super.setVisible(true);
}
/**
* Deleta linha(s) selecionada(s)
*/
public void deleteRow() {
int[] row = super.getSelectedRows();
for (int i = (row.length - 1); i >= 0; i--) {
deleteRow(row[i]);
}
createModel();
super.setVisible(true);
}
private void deleteRow(int row) {
Object[][] o = lin;
lin = new Object[o.length - 1][col.length];
int j = 0;
for (int i = 0; i < o.length; i++) {
if ((i != row)) {
lin[j] = o[i];
j++;
}
}
}
private void createModel() {
int[] colW = new int[super.getColumnCount()];
for (int i = 0; i < colW.length; i++) {
colW[i] = super.getColumn(super.getColumnName(i)).getWidth();
}
TableModel tableModel = new AbstractTableModel() {
public int getColumnCount() {
return col.length;
}
public int getRowCount() {
return lin.length;
}
public Object getValueAt(int row, int col) {
return lin[row][col];
}
public String getColumnName(int column) {
return ("" + col[column]);
}
public boolean isCellEditable(int row, int col) {
return (false);
}
public void setValueAt(Object aValue, int row, int column) {
lin[row][column] = aValue;
}
};
super.setModel(tableModel);
for (int i = 0; i < colW.length; i++) {
super.getColumn(super.getColumnName(i)).setPreferredWidth(colW[i]);
}
}
}
Galera preciso de ajuda!!!
