Teste

package com.example.desenv1.trab2bim.control;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.desenv1.trab2bim.Model.Cidade;
import com.example.desenv1.trab2bim.Model.Cliente;
import com.example.desenv1.trab2bim.Model.Estado;
import com.example.desenv1.trab2bim.banco.SqlitePersistencia;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by desenv1 on 29/06/16.
 */
public class ClienteDAO {

private final SqlitePersistencia database;

public ClienteDAO(SqlitePersistencia database) {
    this.database = database;
}

public void create(final Cliente cliente){
    final SQLiteDatabase writer = this.database.getWritableDatabase();
    try {
        final ContentValues values = new ContentValues();
        values.put("nome", cliente.getNome());
        values.put("idade", cliente.getIdade());
        values.put("id_estado", cliente.getEstado().getIdEstado());
        values.put("id_cidade", cliente.getCidade().getIdCidade());
        final Long id2 = writer.insert("estado", null, values);
        final Long id = writer.insert("cidade", null, values);
        cliente.setIdCliente(id.intValue());
        cliente.setIdCliente(id2.intValue());
    } finally {
        if (writer != null)
            writer.close();
    }
}

public void edit(final Integer id, final Cliente cliente) {
    //Recupera o writer que permite que seja escrito na base de dados
    final SQLiteDatabase writer = this.database.getWritableDatabase();
    try {
        //Para fazer update é precisa setar o valores em contentvalues igual ao insert, porém para este caso ja temos um ID definido
        final ContentValues values = new ContentValues();
        values.put("nome", cliente.getNome());
        values.put("idade", cliente.getIdade());
        values.put("id_estado", cliente.getEstado().getIdEstado());
        values.put("id_cidade", cliente.getCidade().getIdCidade());
        //Faz update do registro na base, porém deve ser um informado uma condição para que não seja feito update em todos os registros por isso é utilizado id_aluno = ? e depois passado como parametro o valor para id
        writer.update("cliente", values, "id_cliente = ?", new String[]{cliente.getIdCliente().toString()});
    } finally {
        //Sempre apos escrever deve ser feito close
        if (writer != null)
            writer.close();
    }

}

/**
 * Remove um registro da base de dados
 *
 * @param cliente
 */
public void remove(final Cliente cliente) {
    final SQLiteDatabase writer = this.database.getWritableDatabase();
    try {
        //Faz o remove de registros da tabela, porém deve ser utilizado um where para não deletar todos os registros, com o where é possivel deletar apenas alguns registros
        //id_aluno = ? é uma restrição para que seja deletado apenas alguns registros, apos este é passado um parametro com o valor para o parametro ?
        writer.delete("cliente", "id_cliente = ?", new String[]{cliente.getIdCliente().toString()});
    } finally {
        //Sempre apos escrever deve ser feito close. Delete também é escrever
        if (writer != null)
            writer.close();
    }
}

/**
 * Faz uma busca na base de dados buscando todos os registros existentes na tabela aluno
 *
 * @return
 */
public List<Cliente> get() {
    final String sql = "select a.id_cliente idCliente, a.nome nome, a.idade idade, t.id_estado idEstado, t.descricao descricaoEst, t.sigla sigla, t.pais pais, c.id_cidade idCidade, c.descricao descricao from cliente a" +
            " inner join estado t on a.id_estado = t.id_estado" +
            "inner join cidade c on a.id_cidade = c.id_cidade";
    //Recupera o reader da base de dados
    final SQLiteDatabase reader = this.database.getReadableDatabase();
    Cursor cursor = null;
    try {
        cursor = reader.rawQuery(sql, null);
        final List<Cliente> clientes = new ArrayList<Cliente>();
        if (!cursor.moveToFirst()) {
            return clientes;
        }
        do {
            clientes.add(readCliente(cursor));
        } while (cursor.moveToNext());
        return clientes;
    } finally {
        if (cursor != null)
            cursor.close();
        reader.close();
    }
}

public Cliente get(final Integer id) {
    final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_estado idEstado, t.descricao descricaoEst, t.sigla sigla, t.pais pais, c.id_cidade idCidade, c.descricao descricao from cliente a " +
            " inner join estado t on a.id_estado = t.id_estado " +
            "inner join cidade c on a.id_cidade = c.id_cidade" +
            " where a.id_cliente = ?";
    final SQLiteDatabase reader = this.database.getReadableDatabase();
    Cursor cursor = null;
    try {
        cursor = reader.rawQuery(sql, new String[]{id.toString()});
        if (!cursor.moveToFirst()) {
            return null;
        }
        return readCliente(cursor);
    } finally {
        if (cursor != null)
            cursor.close();
        reader.close();
    }
}

public List<Cliente> get(final Estado estado) {
    final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_estado idEstado from cliente a " +
            "inner join estado t on a.id_estado = t.id_estado " +
            "where t.id_estado = ?";
    final SQLiteDatabase reader = this.database.getReadableDatabase();
    Cursor cursor = null;
    try {
        cursor = reader.rawQuery(sql, new String[]{estado.getIdEstado().toString()});
        final List<Cliente> clientes = new ArrayList<Cliente>();
        if (!cursor.moveToFirst()) {
            return clientes;
        }
        do {
            clientes.add(readCliente(cursor));
        } while (cursor.moveToNext());
        return clientes;
    } finally {
        if (cursor != null)
            cursor.close();
        reader.close();
    }
}

public List<Cliente> getCid(final Cidade cidade) {
    final String sql = "select a.id_cliente idCliente, a.nome nome, t.id_cidade idCidade from cliente a " +
            "inner join cidade t on a.id_cidade = t.id_cidade " +
            "where t.id_cidade = ?";
    final SQLiteDatabase reader = this.database.getReadableDatabase();
    Cursor cursor = null;
    try {
        cursor = reader.rawQuery(sql, new String[]{cidade.getIdCidade().toString()});
        final List<Cliente> clientes = new ArrayList<Cliente>();
        if (!cursor.moveToFirst()) {
            return clientes;
        }
        do {
            clientes.add(readCliente(cursor));
        } while (cursor.moveToNext());
        return clientes;
    } finally {
        if (cursor != null)
            cursor.close();
        reader.close();
    }
}

protected Cliente readCliente(final Cursor cursor) {
    Integer columnIndex = cursor.getColumnIndex("idCliente");
    final Integer idCliente = cursor.getInt(columnIndex);
    columnIndex = cursor.getColumnIndex("nome");
    final String nome = cursor.getString(columnIndex);
    columnIndex = cursor.getColumnIndex("idade");
    final Integer idade = cursor.getInt(columnIndex);
    columnIndex = cursor.getColumnIndex("idEstado");
    final Integer idEstado = cursor.getInt(columnIndex);
    columnIndex = cursor.getColumnIndex("descricaoEst");
    final String descricaoEst = cursor.getString(columnIndex);
    columnIndex = cursor.getColumnIndex("sigla");
    final String sigla = cursor.getString(columnIndex);
    columnIndex = cursor.getColumnIndex("pais");
    final String pais = cursor.getString(columnIndex);
    columnIndex = cursor.getColumnIndex("idCidade");
    final Integer idCidade = cursor.getInt(columnIndex);
    columnIndex = cursor.getColumnIndex("descricao");
    final String descricao = cursor.getString(columnIndex);
    final Estado estado = new Estado(idEstado,descricaoEst, sigla, pais);
    final Cidade cidade = new Cidade(idCidade, descricao, estado);
    return new Cliente(idCliente,nome, idade, estado, cidade);
}
}

Isso é uma pergunta?
Se não vou sinalizar como impróprio!