package br.com.livrowebservices.carros.domain; 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; import java.util.ArrayList; import java.util.List; public class CarroDB extends SQLiteOpenHelper { private static final String TAG = "sql"; // Nome do banco private static final String NOME_BANCO = "livro_android.sqlite"; private static final int VERSAO_BANCO = 1; public CarroDB(Context context) { // context, nome do banco, factory, versão super(context, NOME_BANCO, null, VERSAO_BANCO); } @Override public void onCreate(SQLiteDatabase db) { Log.d(TAG, "Criando a Tabela carro..."); db.execSQL("create table if not exists carro (_id integer primary key,nome text, desc text, url_foto text,url_info text,url_video text, latitude text,longitude text, tipo text);"); Log.d(TAG, "Tabela carro criada com sucesso."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Caso mude a versão do banco de dados, podemos executar um SQL aqui if (oldVersion == 1 && newVersion == 2) { // Execute o script para atualizar a versão... } } // Insere um novo carro, ou atualiza se já existe. // O id do carro vem do web service. // Vai salvar ou atualizar no SQLite com o mesmo id. public long save(Carro carro) { long id = carro.id == null? 0 : carro.id; SQLiteDatabase db = getWritableDatabase(); try { ContentValues values = new ContentValues(); values.put("_id", id); values.put("nome", carro.nome); values.put("desc", carro.desc); values.put("url_foto", carro.urlFoto); values.put("url_info", carro.urlInfo); values.put("url_video", carro.urlVideo); values.put("latitude", carro.latitude); values.put("longitude", carro.longitude); values.put("tipo", carro.tipo); // Verifica se o carro existe Cursor cursorExists = db.query("carro", null, "_id = " + id , null, null, null, null); boolean exists = cursorExists.getCount() > 0; if (exists) { String _id = String.valueOf(carro.id); String[] whereArgs = new String[]{_id}; // update carro set values = ... where _id=? int count = db.update("carro", values, "_id=?", whereArgs); return count; } else { // insert into carro values (...) id = db.insert("carro", "", values); return id; } } finally { db.close(); } } // Deleta o carro public int delete(Carro carro) { SQLiteDatabase db = getWritableDatabase(); try { // delete from carro where _id=? int count = db.delete("carro", "_id=?", new String[]{String.valueOf(carro.id)}); Log.i(TAG, "Deletou [" + count + "] registro."); return count; } finally { db.close(); } } // Deleta os carros do tipo fornecido public int deleteCarrosByTipo(String tipo) { SQLiteDatabase db = getWritableDatabase(); try { // delete from carro where tipo=? int count = db.delete("carro", "tipo=?", new String[]{tipo}); Log.i(TAG, "Deletou [" + count + "] registros"); return count; } finally { db.close(); } } // Consulta a lista com todos os carros public List<Carro> findAll() { SQLiteDatabase db = getReadableDatabase(); try { // select * from carro Cursor c = db.query("carro", null, null, null, null, null, null, null); return toList(c); } finally { db.close(); } } // Consulta o carro pelo tipo public List<Carro> findAllByTipo(String tipo) { SQLiteDatabase db = getReadableDatabase(); try { // "select * from carro where tipo=?" Cursor c = db.query("carro", null, "tipo = '" + tipo + "'", null, null, null, null); return toList(c); } finally { db.close(); } } public int count(Long id) { SQLiteDatabase db = getReadableDatabase(); try { // "select * from carro where tipo=?" Cursor c = db.query("carro", null, "_id = " + id , null, null, null, null); int count = c.getCount(); return count; } finally { db.close(); } } public Carro getById(Long id) { SQLiteDatabase db = getReadableDatabase(); try { // "select * from carro where tipo=?" Cursor c = db.query("carro", null, "_id = " + id , null, null, null, null); List<Carro> carros = toList(c); Carro carro = carros.size() > 0 ? carros.get(0) : null; return carro; } finally { db.close(); } } // Lê o cursor e cria a lista de carros private List<Carro> toList(Cursor c) { List<Carro> carros = new ArrayList<Carro>(); if (c.moveToFirst()) { do { Carro carro = new Carro(); // recupera os atributos de carro carro.id = c.getLong(c.getColumnIndex("_id")); carro.nome = c.getString(c.getColumnIndex("nome")); carro.desc = c.getString(c.getColumnIndex("desc")); carro.urlInfo = c.getString(c.getColumnIndex("url_info")); carro.urlFoto = c.getString(c.getColumnIndex("url_foto")); carro.urlVideo = c.getString(c.getColumnIndex("url_video")); carro.latitude = c.getString(c.getColumnIndex("latitude")); carro.longitude = c.getString(c.getColumnIndex("longitude")); carro.tipo = c.getString(c.getColumnIndex("tipo")); carros.add(carro); } while (c.moveToNext()); } return carros; } // Executa um SQL public void execSQL(String sql) { SQLiteDatabase db = getWritableDatabase(); try { db.execSQL(sql); } finally { db.close(); } } // Executa um SQL public void execSQL(String sql, Object[] args) { SQLiteDatabase db = getWritableDatabase(); try { db.execSQL(sql, args); } finally { db.close(); } } }