Erro ao cadastrar

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);

ve se não é aqui:

ON DELETE RESTRICT ON UPDATE CASCADE), 

altera pra :

ON DELETE RESTRICT ON UPDATE CASCADE ,

Em que parte vc identificou?

//  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);";  

altera para:

//  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);";  

Estou trocando. Vou testar. Você viu algo a mais de errado?

Troquei e deu outro erro:

06-04 01:33:52.620: E/AndroidRuntime(525): android.database.sqlite.SQLiteException: near “,”: syntax error: create table os (_id integer primary key autoincrement, id_cliente integer, car_modelo text, car_placa text, FOREIGN KEY ( id_cliente ) REFERENCES clientes (_id ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( id_servico ) REFERENCES servicos (id_servico ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( id_horario ) REFERENCES horarios (id_horario ) ON DELETE RESTRICT ON UPDATE CASCADE);

Ramon Pires, postei outro erro.

1º tenta entender o sql gerado.
Se você olhar direito o erro é o mesmo ,talvez ele se repita no sql das suas outras tabelas:

 ON DELETE RESTRICT ON UPDATE CASCADE),

Altera para :

 ON DELETE RESTRICT ON UPDATE CASCADE,

Nessa aqui, certo?

//  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);";

Seria isso?

Agora deu esse erro:

06-04 02:16:52.460: E/AndroidRuntime(557): android.database.sqlite.SQLiteException: unknown column “id_servico” in foreign key definition: create table os (_id integer primary key autoincrement, id_cliente integer, car_modelo text, car_placa text, FOREIGN KEY ( id_cliente ) REFERENCES clientes (_id ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_servico ) REFERENCES servicos (id_servico ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_horario ) REFERENCES horarios (id_horario ) ON DELETE RESTRICT ON UPDATE CASCADE);

exatamente

06-04 02:16:52.460: E/AndroidRuntime(557): android.database.sqlite.SQLiteException: unknown column “id_servico” in foreign key definition: create table os (_id integer primary key autoincrement, id_cliente integer, car_modelo text, car_placa text, FOREIGN KEY ( id_cliente ) REFERENCES clientes (_id ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_servico ) REFERENCES servicos (id_servico ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_horario ) REFERENCES horarios (id_horario ) ON DELETE RESTRICT ON UPDATE CASCADE);

Agora deu esse, estou analisando aqui mas não estou identificando o erro. Sei que é o campo id_servico.

Novamente,olhe no sql gerado e veja que não está declarado o id_servico na tabela.

Então, aqui que declaro os campos:

//  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";

E o campo id_servico está declardo como KEY_IDSERVICO_OS

Tenta agora.

private static final String DATABASE_CREATE_OS = "create table " + DATABASE_TABLE_OS + " ("  
    + KEY_ID_OS + " integer primary key autoincrement, "  
    + KEY_IDCLIENTE_OS + " integer, "  
    + KEY_IDSERVICO_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);";  

Agora deu esse:

06-04 02:30:35.871: E/AndroidRuntime(587): android.database.sqlite.SQLiteException: unknown column “id_horario” in foreign key definition: create table os (_id integer primary key autoincrement, id_cliente integer, id_servico integer, car_modelo text, car_placa text, FOREIGN KEY ( id_cliente ) REFERENCES clientes (_id ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_servico ) REFERENCES servicos (id_servico ) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY ( id_horario ) REFERENCES horarios (id_horario ) ON DELETE RESTRICT ON UPDATE CASCADE);

O que está acontecendo?

O que vc fez para arrumar no outro erro?

private static final String DATABASE_CREATE_OS = "create table " + DATABASE_TABLE_OS + " ("  
    + KEY_ID_OS + " integer primary key autoincrement, "  
    + KEY_IDCLIENTE_OS + " integer, "  
    + KEY_IDSERVICO_OS  + " integer, "  
    + KEY_IDHORARIO_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);";  

Funcionou, mas não estou identifiquei onde estava o erro. Poderia me explicar?

Está gravando mas voltando para a tela principal. Gostaria que mostrasse a mensagem que gravou e ficasse na mesma tela.

vc havia criado a referência para chave estrangeira, mas não criou o campo no sql da tabela que referênciaria o id da outra tabela.

E referente a sua outra dúvida:

 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();  
            }  
        });  

Você está chamando esse “finish()” , ele finaliza a sua activity atual e chama a última activity executada no seu stack de activities, que no caso deve ser sua Tela Principal.
Remove o finish() ,que sua activity não será finalizada.

Ok, resolvido. Será que não ocorrerá mais esse erro com as demais sql?

Acredito que não. Pergunta: Essa aplicação é pessoal ou para algum cliente?