Pessoal, alguém poderia me ajudar, não estou conseguindo identificar o erro.
Classe DbAdapter
package br.me.aqua.banco;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DbAdapter {
private static final String DATABASE_NAME = "bancoaqua";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_TABLE_CLIENTES = "clientes";
private static final String DATABASE_TABLE_CARROS = "carros";
private static final String DATABASE_TABLE_TIPO_CARRO = "tipo_carro";
private static final String DATABASE_TABLE_SERVICOS = "servicos";
private static final String DATABASE_TABLE_HORARIOS = "horarios";
private static final String DATABASE_TABLE_OS = "os";
// CAMPOS DA TABELA CLIENTES
public static final String KEY_ID_CLI = "_id";
public static final String KEY_NOME = "nome";
public static final String KEY_ENDERECO = "endereco";
public static final String KEY_TELEFONE = "telefone";
public static final String KEY_CELULAR = "celular";
public static final String KEY_EMAIL = "email";
// CAMPOS DA TABELA CARROS
public static final String KEY_ID_CARRO = "_id";
public static final String KEY_IDCLIENTE_CARRO = "id_cliente";
public static final String KEY_IDTIPO_CARRO = "id_tipo_carro";
public static final String KEY_MODELO = "car_modelo";
public static final String KEY_PLACA = "car_placa";
// CAMPOS DA TABELA TIPO_CARRO
public static final String KEY_ID_TIP = "_id";
public static final String KEY_TIPDESC = "tip_descricao";
// CAMPOS DA TABELA SERVICOS
public static final String KEY_ID_SER = "_id";
public static final String KEY_IDTIPO_SER = "id_tipo_carro";
public static final String KEY_DESCRICAO_SER = "ser_descricao";
public static final String KEY_VALOR = "ser_valor";
// CAMPOS DA TABELA HORARIOS
public static final String KEY_ID_HOR = "_id";
public static final String KEY_HORARIO = "hor_horario";
// CAMPOS DA TABELA OS
public static final String KEY_ID_OS = "_id";
public static final String KEY_IDCLIENTE_OS = "id_cliente";
public static final String KEY_IDSERVICO_OS = "id_servico";
public static final String KEY_IDHORARIO_OS = "id_horario";
public static final String KEY_DATA = "os_data";
// CRIA A TABELA CLIENTES
private static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("
+ KEY_ID_CLI + " integer primary key autoincrement, "
+ KEY_NOME + " text, "
+ KEY_ENDERECO + " text, "
+ KEY_TELEFONE + " text, "
+ KEY_CELULAR + " text, "
+ KEY_EMAIL + " text);";
// CRIA A TABELA CARROS
private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("
+ KEY_ID_CARRO + " integer primary key autoincrement, "
+ KEY_IDCLIENTE_CARRO + " integer, "
+ KEY_IDTIPO_CARRO + " integer, "
+ KEY_MODELO + " text, "
+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO
+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( "
+ KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " ("
+ KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";
// CRIA A TABELA TIPO_CARRO
private static final String DATABASE_CREATE_TIPO_CARRO = "create table " + DATABASE_TABLE_TIPO_CARRO + " ("
+ KEY_ID_TIP + " integer primary key autoincrement, "
+ KEY_TIPDESC + " text;";
// CRIA A TABELA SERVICOS
private static final String DATABASE_CREATE_SERVICOS = "create table " + DATABASE_TABLE_SERVICOS + " ("
+ KEY_ID_SER + " integer primary key autoincrement, "
+ KEY_IDTIPO_SER + " integer, "
+ KEY_DESCRICAO_SER + " text, "
+ KEY_VALOR + " text, FOREIGN KEY ( " + KEY_IDTIPO_SER
+ " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " (" + KEY_IDTIPO_SER
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE);";
// CRIA A TABELA HORARIOS
private static final String DATABASE_CREATE_HORARIOS = "create table " + DATABASE_TABLE_HORARIOS + " ("
+ KEY_ID_HOR + " integer primary key autoincrement, "
+ KEY_HORARIO + " text);";
// CRIA A TABELA OS
private static final String DATABASE_CREATE_OS = "create table " + DATABASE_TABLE_OS + " ("
+ KEY_ID_OS + " integer primary key autoincrement, "
+ KEY_IDCLIENTE_OS + " integer, "
+ KEY_MODELO + " text, "
+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_OS
+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_ID_CLI
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( "
+ KEY_IDSERVICO_OS + " ) REFERENCES "
+ DATABASE_TABLE_SERVICOS + " (" + KEY_IDSERVICO_OS
+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( "
+ KEY_IDHORARIO_OS + " ) REFERENCES " + DATABASE_TABLE_HORARIOS + " ("
+ KEY_IDHORARIO_OS + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";
private final Context mCtx;
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
public DbAdapter(Context ctx){
this.mCtx = ctx;
}
public DbAdapter open() throws SQLiteException{
if(isClosed()){
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
}
return this;
}
public void close(){
mDbHelper.close();
}
public boolean isClosed(){
return mDb == null || !mDb.isOpen();
}
// TABELA CLIENTES: KEY_ID_CLI, KEY_NOME, KEY_ENDERECO, KEY_TELEFONE, KEY_CELULAR, KEY_EMAIL
// GRAVAR CLIENTE
public long gravarCliente(String nome, String endereco, String telefone, String celular, String email){
ContentValues valores = new ContentValues();
valores.put(KEY_NOME, nome);
valores.put(KEY_ENDERECO, endereco);
valores.put(KEY_TELEFONE, telefone);
valores.put(KEY_CELULAR, celular);
valores.put(KEY_EMAIL, email);
return mDb.insert(DATABASE_TABLE_CLIENTES, null, valores);
}
// ALTERAR CLIENTE
public boolean atualizarCliente(long Id, String nome, String endereco, String telefone, String celular, String email){
ContentValues valores = new ContentValues();
valores.put(KEY_NOME, nome);
valores.put(KEY_ENDERECO, endereco);
valores.put(KEY_TELEFONE, telefone);
valores.put(KEY_CELULAR, celular);
valores.put(KEY_EMAIL, email);
return mDb.update(DATABASE_TABLE_CLIENTES, valores, KEY_ID_CLI + "=" + Id, null) > 0;
}
// APAGAR CLIENTE
public boolean apagarCliente(long Id){
int qt = mDb.delete(DATABASE_TABLE_CLIENTES, KEY_ID_CLI + "=" + Id, null);
return qt > 0;
}
// TABELA TIPO CARRO : KEY_ID_TIP, KEY_TIPDESC
// GRAVAR TIPO CARRO
public long gravarTipoCarro(String tipo){
ContentValues valores = new ContentValues();
valores.put(KEY_TIPDESC, tipo);
return mDb.insert(DATABASE_TABLE_TIPO_CARRO, null, valores);
}
// ALTERAR TIPO CARRO
public boolean atualizarTipoCarro(long Id, String tipo){
ContentValues valores = new ContentValues();
valores.put(KEY_TIPDESC, tipo);
return mDb.update(DATABASE_TABLE_TIPO_CARRO, valores, KEY_ID_TIP + "=" + Id, null) > 0;
}
// APAGAR TIPO CARRO
public boolean apagarTipoCarro(long Id){
int qt = mDb.delete(DATABASE_TABLE_TIPO_CARRO, KEY_ID_TIP + "=" + Id, null);
return qt > 0;
}
// TABELA CARROS: KEY_ID_CARRO, KEY_IDCLIENTE_CARRO, KEY_IDTIPO_CARRO, KEY_MODELO, KEY_PLACA
// GRAVAR CARRO
public long gravarCarroCliente(String modelo, String placa, String idcliente, String idtipo){
ContentValues valores = new ContentValues();
valores.put(KEY_IDCLIENTE_CARRO, Integer.valueOf(idcliente.trim()));
valores.put(KEY_IDTIPO_CARRO, Integer.valueOf(idtipo.trim()));
valores.put(KEY_MODELO, modelo);
valores.put(KEY_PLACA, placa);
return mDb.insert(DATABASE_TABLE_CARROS, null, valores);
}
// ALTERAR CARRO
public boolean atualizarCarro(long Id, String modelo, String placa, String idcliente, String idtipo){
ContentValues valores = new ContentValues();
valores.put(KEY_IDCLIENTE_CARRO, Integer.valueOf(idcliente.trim()));
valores.put(KEY_IDTIPO_CARRO, Integer.valueOf(idtipo.trim()));
valores.put(KEY_MODELO, modelo);
valores.put(KEY_PLACA, placa);
return mDb.update(DATABASE_TABLE_CARROS, valores, KEY_ID_CLI + "=" + Id, null) > 0;
}
// APAGAR CARRO
public boolean apagarCarro(long Id){
int qt = mDb.delete(DATABASE_TABLE_CARROS, KEY_ID_CLI + "=" + Id, null);
return qt > 0;
}
// TABELA SERVIÇOS: KEY_ID_SER, KEY_IDTIPO_SER, KEY_DESCRICAO_SER, KEY_VALOR
// GRAVAR SERVIÇO
public long gravarServico(String descricao, String valor, String idservico, String idtipocarro){
ContentValues valores = new ContentValues();
valores.put(KEY_ID_SER, Integer.valueOf(idservico.trim()));
valores.put(KEY_IDTIPO_SER, Integer.valueOf(idtipocarro.trim()));
valores.put(KEY_DESCRICAO_SER, descricao);
valores.put(KEY_VALOR, valor);
return mDb.insert(DATABASE_TABLE_SERVICOS, null, valores);
}
// ALTERAR SERVIÇO
public boolean atualizarServico(long Id, String descricao, String valor, String idservico, String idtipocarro){
ContentValues valores = new ContentValues();
valores.put(KEY_ID_SER, Integer.valueOf(idservico.trim()));
valores.put(KEY_IDTIPO_SER, Integer.valueOf(idtipocarro.trim()));
valores.put(KEY_DESCRICAO_SER, descricao);
valores.put(KEY_VALOR, valor);
return mDb.update(DATABASE_TABLE_SERVICOS, valores, KEY_ID_SER + "=" + Id, null) > 0;
}
// APAGAR SERVICO
public boolean apagarServico(long Id){
int qt = mDb.delete(DATABASE_TABLE_SERVICOS, KEY_ID_SER + "=" + Id, null);
return qt > 0;
}
// TABELA HORÁRIOS: KEY_ID_HOR E KEY_HORARIO
// GRAVAR HORARIO
public long gravarHorario(String hora){
ContentValues valores = new ContentValues();
valores.put(KEY_HORARIO, hora);
return mDb.insert(DATABASE_TABLE_HORARIOS, null, valores);
}
// ALTERAR HORARIO
public boolean atualizarHorario(long Id, String hora){
ContentValues valores = new ContentValues();
valores.put(KEY_HORARIO, hora);
return mDb.update(DATABASE_TABLE_HORARIOS, valores, KEY_ID_HOR + "=" + Id, null) > 0;
}
// APAGAR HORARIO
public boolean apagarHorario(long Id){
int qt = mDb.delete(DATABASE_TABLE_HORARIOS, KEY_ID_HOR + "=" + Id, null);
return qt > 0;
}
// TABELA OS: KEY_ID_OS, KEY_IDCLIENTE_OS, KEY_IDSERVICO_OS, KEY_IDHORARIO_OS, KEY_DATA
// GRAVAR OS
public long gravarOs(String data, String idcarro_os, String idcliente_os, String idservico_os, String idhorario_os){
ContentValues valores = new ContentValues();
valores.put(KEY_ID_OS, Integer.valueOf(idcarro_os.trim()));
valores.put(KEY_IDCLIENTE_OS, Integer.valueOf(idcliente_os.trim()));
valores.put(KEY_IDSERVICO_OS, idservico_os);
valores.put(KEY_IDHORARIO_OS, idhorario_os);
valores.put(KEY_DATA, data);
return mDb.insert(DATABASE_TABLE_OS, null, valores);
}
// ALTERAR OS
public boolean atualizarOs(long Id, String data, String idcarro_os, String idcliente_os, String idservico_os, String idhorario_os){
ContentValues valores = new ContentValues();
valores.put(KEY_ID_OS, Integer.valueOf(idcarro_os.trim()));
valores.put(KEY_IDCLIENTE_OS, Integer.valueOf(idcliente_os.trim()));
valores.put(KEY_IDSERVICO_OS, idservico_os);
valores.put(KEY_IDHORARIO_OS, idhorario_os);
valores.put(KEY_DATA, data);
return mDb.update(DATABASE_TABLE_OS, valores, KEY_ID_OS + "=" + Id, null) > 0;
}
// APAGAR OS
public boolean apagarOs(long Id){
int qt = mDb.delete(DATABASE_TABLE_OS, KEY_ID_OS + "=" + Id, null);
return qt > 0;
}
// CONSULTAS
// TODOS OS CLIENTES
public Cursor getTodosClientes(){
return mDb.query(DATABASE_TABLE_CLIENTES, null, null, null, null, null, null);
}
// HORARIO POR ID
public Cursor getHorario(long Id){
return mDb.query(DATABASE_TABLE_HORARIOS, null, KEY_ID_HOR + "=" + Id, null, null, null, null);
}
// CLIENTE POR ID
public Cursor getCliente(long Id){
return mDb.query(DATABASE_TABLE_CLIENTES, null, KEY_ID_CLI + "=" + Id, null, null, null, null);
}
// CLIENTE POR NOME
public Cursor getClientePorNome(String nomeString){
String[] selectionArgs = {nomeString + "%"};
// return mDb.query(DATABASE_TABLE_CLIENTES, null, KEY_NOME + "=" + selectionArgs, null, null, null, null);
return mDb.rawQuery("SELECT * FROM clientes WHERE nome like ?", selectionArgs);
}
// CARRO POR PLACA
public Cursor getCarro(String modeloString){
// return mDb.query(DATABASE_TABLE_CARROS, null, KEY_NOME + "=" + nomeString, null, null, null, null);
String[] selectionArgs = {modeloString + "%"};
return mDb.rawQuery("SELECT * FROM carros WHERE placa like ?", selectionArgs);
}
// CARRO X CLIENTE POR PLACA
public Cursor getCarroPorPlaca(String placaString){
String[] selectionArgs = {placaString};
// return mDb.rawQuery("SELECT ca.placa, ca.modelo, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente",null);
return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente WHERE ca.placa = ?", selectionArgs);
}
// CARRO X CLIENTE POR NOME CLIENTE
public Cursor getCarroPorCliente(String nomeString){
String[] selectionArgs = {nomeString + "%"};
return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente WHERE c.nome like ?", selectionArgs);
}
// CARRO X CLIENTE TODOS
public Cursor getCarrosCliente(){
return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente", null);
}
private class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_CLIENTES);
db.execSQL(DATABASE_CREATE_CARROS);
db.execSQL(DATABASE_CREATE_TIPO_CARRO);
db.execSQL(DATABASE_CREATE_SERVICOS);
db.execSQL(DATABASE_CREATE_HORARIOS);
db.execSQL(DATABASE_CREATE_OS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
Cadastrar Horários
package br.me.aqua;
import br.me.aqua.banco.DbAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
public class CadastrarHorario extends Activity { // Início da Classe CadastrarCliente
private long mId;
private EditText Horario;
private ImageButton salvar, pesquisar, limpar, voltar;
private DbAdapter mDb;
@Override
protected void onCreate(Bundle icicle){ // Início do método onCreate
super.onCreate(icicle);
setContentView(R.layout.cad_horarios);
mDb = new DbAdapter(this);
mId = getIntent().getLongExtra(DbAdapter.KEY_ID_HOR, 0);
Horario = (EditText) findViewById(R.id.edtHorario);
if(mId > 0){
mDb.open();
Cursor horario = mDb.getHorario(mId);
if(horario.moveToFirst()){
Horario.setText(horario.getString(horario.getColumnIndex(DbAdapter.KEY_HORARIO)));
}
mDb.close();
}
// Código do botão Salvar da Tela de Cadastro de Clientes
salvar = (ImageButton) findViewById(R.id.btSalvar);
salvar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String horarioString = Horario.getText().toString();
mDb.open();
if(mId == 0){ // Inclusão
if(Horario.getText().toString().equals("")){
mensagemExibir("Erro ao Salvar","Dados em branco, verifique!");
return;
}
long id = mDb.gravarHorario(horarioString);
if(id != -1)
setResult(RESULT_OK);
mensagemExibir("Salvar","Horário cadastrado com sucesso!");
}else{ // Alteração
boolean alterado = mDb.atualizarHorario(mId, horarioString);
if(alterado)
setResult(RESULT_OK);
mensagemExibir("Atualização","Horário" + "Horário alterado com sucesso!");
}
mDb.close();
finish();
}
});
// Código do botão Cancelar da Tela de Cadastro de Clientes
pesquisar = (ImageButton) findViewById(R.id.btPesquisar);
pesquisar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDb.open();
if(Horario.getText().toString().equals("")){
mensagemExibir("Erro ao Pesquisar","Dados em branco, verifique!");
return;
}
String horarioString = Horario.getText().toString();
Cursor horario = mDb.getClientePorNome(horarioString);
while(horario.moveToNext()){
Horario.setText(horario.getString(horario.getColumnIndex("hor_horario")));
}
mDb.close();
}
});
limpar = (ImageButton) findViewById(R.id.btLimpar);
limpar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Horario.setText("");
}
});
// Código do botão Cancelar da Tela de Cadastro de Clientes
voltar = (ImageButton) findViewById(R.id.btVoltar);
// Início do setOnClickListener. Volta para a Tela Principal
voltar.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
}); // Fim do setOnClickListener
} // Fim do método onCreate
public void mensagemExibir(String titulo, String texto){
AlertDialog.Builder mensagem = new AlertDialog.Builder(CadastrarHorario.this);
mensagem.setTitle(titulo);
mensagem.setMessage(texto);
mensagem.setNeutralButton("Ok", null);
mensagem.show();
}
} // Fim da Classe CadastrarHorarios
Erro ao clicar no botão salvar:
06-04 00:44:56.851: E/AndroidRuntime(465): android.database.sqlite.SQLiteException: near “,”: syntax error: create table carros (_id integer primary key autoincrement, id_cliente integer, id_tipo_carro integer, car_modelo text, car_placa text, FOREIGN KEY ( id_cliente ) REFERENCES clientes (_id ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( id_tipo_carro ) REFERENCES tipo_carro (id_tipo_carro ) ON DELETE RESTRICT ON UPDATE CASCADE);