No such table

Oi, pessoal

Estou criando uma app usando SqLite que possui várias tabelas. A primeira tabela está funcionando, quando criei a segunda começou
a apresentar o erro ‘NO SUCH TABLE’ quando executo uma query.

Alguém pode ajudar?
O erro encontra-se em public List getLista(Cliente cliente) {
Cursor cursor = getWritableDatabase().query(TABELA, COLS, null, null, null, null, “cod_cli”); //Erro nesta linha ‘No such table’;
}

Seque abaixo código completo:
package br.com.teste.promotor.dal;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import br.com.teste.promotor.R;
import br.com.teste.promotor.bll.Cliente;
import br.com.teste.promotor.bll.ClienteContato;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class ClienteContatoDAL extends SQLiteOpenHelper
{
private static final String TABELA = “gerk_cli_contat”;
private static final String CATEGORIA = “Promotor”;
private static final String[] COLS = { “id”, “cod_cli”, “seq”, “nome” };

public ClienteContatoDAL(Context context) {
	super(context, context.getString(R.string.database), null,  Integer.parseInt(context.getString(R.string.versaoBD)));
}

public void onCreate(SQLiteDatabase database) {
	try {
		String ddl = " CREATE TABLE " + TABELA + " (id INTEGER PRIMARY KEY, "
			+ " cod_cli INTEGER NOT NULL, seq INTEGER NOT NULL, nome VARCHAR(30) NOT NULL) ";

		database.execSQL(ddl);
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro Create " + TABELA + " " + erro.getMessage());
	}
}

public void onUpgrade(SQLiteDatabase database, int oldVersion, int netVersion) {
	try {
		String sql = " DROP TABLE IF EXISTS " + TABELA;
		database.execSQL(sql);
		onCreate(database); 
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro Drop tabele " + TABELA + " " + erro.getMessage());
	}
}

public List<ClienteContato> getLista(Cliente cliente) {
	try {
		List<ClienteContato> clientesContato = new ArrayList<ClienteContato>();
	
                                            // erro na linha abaixo: 'No such table'
		Cursor cursor = getWritableDatabase().query(TABELA, COLS, null, null, null, null, "cod_cli");
		
		while (cursor.moveToNext()) {
			ClienteContato clienteContato = new ClienteContato();
			clienteContato = setClienteContato(clienteContato, cursor);
			clientesContato.add(clienteContato); 
		}
		cursor.close(); 
		close(); //do banco
		return clientesContato;
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro List<ClienteContato> getLista(Cliente cliente) " + erro.getMessage());
		return null;
	}
	
}

public String[] getLista(Context context, Cliente cliente) {
	try {
		List<ClienteContato> clientesContato = new ArrayList();
		clientesContato = getLista(cliente);
	
		String[] listaClienteContato = new String[clientesContato.size()];
		for(int i = 0; i < clientesContato.size(); i++) {
			ClienteContato clienteContato = (ClienteContato) clientesContato.get(i);
			listaClienteContato[i] = clienteContato.getNome();
		}
			return listaClienteContato;
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro String[] getLista(Context context) " + erro.getMessage());
		return null;
	}
}

private ClienteContato setClienteContato(ClienteContato clienteContato, Cursor cursor) {
	try {
		clienteContato.setId(cursor.getLong(cursor.getColumnIndex("id")));
		clienteContato.setCodCli(cursor.getInt(cursor.getColumnIndex("cod_cli")));
		clienteContato.setSeq(cursor.getInt(cursor.getColumnIndex("seq")));
		clienteContato.setNome(cursor.getString(cursor.getColumnIndex("nome")));
	
		return clienteContato;
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro Cliente setClienteContato(ClienteContato clienteContato, Cursor cursor) " + erro.getMessage());
		return null;
	}
}

public void insere(ClienteContato clienteContato) {
	try {
		ContentValues values = new ContentValues();

		values.put("cod_cli", clienteContato.getCodCli());
		values.put("seq", clienteContato.getSeq());
		values.put("nome", clienteContato.getNome());
	
		getWritableDatabase().insert(TABELA, null, values); //abre o BD para insert
		close(); // fecha BD do SQLiteOpenHelper
	} catch (Exception erro) {
		Log.e(CATEGORIA,"Erro insere(ClienteContato clienteContato) " + erro.getMessage());
	}
}

}

Agradeço qualquer ajuda.

FNunes

Cara, respeite o fórum, sempre que for postar código use a Tag [ Code] blz?

Ajusta isso ai, e coloque também o log do erro.

fasandes,

Sinceramente não entendo porque postar um código em um fórum que tem por objetivo tratar códigos, seja um desrespeito.
De qualquer forma onde de ser colocado a tag [code] ?

Segue erro: android.database.sqlite.SQLiteException: no such table: gerk_cli_contat: , while compiling: SELECT id, cod_cli, seq, nome FROM gerk_cli_contat WHERE cod_cli=? ORDER BY seq.

Obrigado pelo contato.

Cara, sem a tag do código, levei o dobro do tempo para ver o erro, fica foda ate de ajudar.

No sqLite não existe varchar… Olha se houve erro dentro do seu catch.

SQLite existe varchar sim, eu mesmo utilizo.

Mas a questão do [code] é necessário sim.

Antes do seu código você bota [code] e depois coloca [/code], sem o “*”.

Pessoal,

Consegui entender o que está acontecendo.
Tenho duas classes Cliente e ClienteContato, ambas extends SQLiteOpenHelper. A primeira funciona, enquanto a segunda mesmo fazendo “Create Table” e inserindo registros sem acusar erro, quando faço uma query retorna a mensagem “No such table”.

Extrai o banco do Emulador e constatei que a tabela ClienteContato não foi criada, mesmo passando pelo “Create table” sem erros. Por isso apresenta erro na query.

Fiz um teste colocando o comando de “Create table ContatoCliente” dentro da classe Cliente e funcionou perfeitamente, criou a tabela, inseriu registro e consegui fazer a query sem erros.

Solução:
Ainda não fiz o código, mas a idéia é criar uma única classe que extends SQLiteOpenHelper e centralizar toda criação de tabelas.

Agradeço a todos pelo contato.

Vários tutoriais recomendam isso.