Criando duas tabelas no SQLite Android

Bom dia pessoal,

Estou com um problema. Tenho essa string para criar duas tabelas na minha classe DbAdapter, ok? Ao tentar gravar, informou que gravou com sucesso mas no logCat deu o seguinte erro:
08-21 13:28:24.106: E/Database(280): android.database.sqlite.SQLiteException: no such table: carros: , while compiling: INSERT INTO carros(placa, modelo, id_cliente) VALUES(?, ?, ?);

	private static final String DATABASE_TABLE_CLIENTES = "clientes";
	private static final String DATABASE_TABLE_CARROS = "carros";
	
//  CAMPOS DA TABELA CLIENTES	
	public static final String KEY_IDCLI = "_id";
	public static final String KEY_NOME = "nome";
	public static final String KEY_ENDERECO = "endereco";

//  CAMPOS DA TABELA CARROS	
	public static final String KEY_IDCARRO = "_id";
	public static final String KEY_IDCLIENTE = "id_cliente";
	public static final String KEY_MODELO = "modelo";
	public static final String KEY_PLACA = "placa";

private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE_CLIENTES + " ("
	+ KEY_IDCLI + " integer primary key autoincrement, "
	+ KEY_NOME + " text, "
	+ KEY_ENDERECO + " text); create table " + DATABASE_TABLE_CARROS + " ("
	+ KEY_IDCARRO + " integer primary key autoincrement, "
	+ KEY_IDCLIENTE + ", integer"
	+ KEY_MODELO + " text, "
	+ KEY_PLACA + "text) , FOREIGN KEY ( id_cliente) REFERENCES clientes (_id) ON DELETE RESTRICT ON UPDATE CASCADE);";


// Grava carro
	public long gravarCarroCliente(String idcliente, String modelo, String placa){
		ContentValues valores = new ContentValues();
		valores.put(KEY_IDCLIENTE, idcliente);
		valores.put(KEY_MODELO, modelo);
		valores.put(KEY_PLACA, placa);
		
		return mDb.insert(DATABASE_TABLE_CARROS, null, valores);
	}

Aqui é o código do botão para gravar:

    mDb.gravarCarroCliente(idclienteString, modeloString, placaString);
...
+ KEY_IDCLIENTE + ", integer"  
    + KEY_MODELO + " text, "  
...

Se você for checar a string SQL, vai ver que tem algo como “, integermodelo” (olhe o espaço e vírgula no lugar errado).

Conselho: antes de fazer essa concatenação monstro, crie uma string SQL em um editor de texto qualquer, teste-a, e depois veja se você pode montá-la no seu programa e dar o mesmo resultado. Problemas com espaços e vírgulas são muito comuns quando se faz esse tipo de concatenação.

Fiz a correção:

//  CRIA AS TABELAS
	private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE_CLIENTES + " ("
	+ KEY_IDCLI + " integer primary key autoincrement, "
	+ KEY_NOME + " text, "
	+ KEY_ENDERECO + " text); create table " + DATABASE_TABLE_CARROS + " ("
	+ KEY_IDCARRO + " integer primary key autoincrement, "
	+ KEY_IDCLIENTE + " integer, "
	+ KEY_MODELO + " text, "
	+ KEY_PLACA + "text) , FOREIGN KEY (id_cliente) REFERENCES clientes (_id) ON DELETE RESTRICT ON UPDATE CASCADE);";

Continua o erro:

08-21 13:28:24.106: E/Database(280): android.database.sqlite.SQLiteException: no such table: carros: , while compiling: INSERT INTO carros(placa, modelo, id_cliente) VALUES(?, ?, ?);

Pegue essa definição da sua string, e crie um programinha bem bobo (em Java SE mesmo, não precisa ser em Android) que imprima essa string. Confira para ver se está certa.

Eu já vi que tem um probleminha, mas é melhor para você entender como é que se consertam as coisas, e de qualquer jeito não sei se tem mais algum problema.

class Teste {
private static final String DATABASE_TABLE_CLIENTES = "clientes";  
    private static final String DATABASE_TABLE_CARROS = "carros";  
      
//  CAMPOS DA TABELA CLIENTES     
    public static final String KEY_IDCLI = "_id";  
    public static final String KEY_NOME = "nome";  
    public static final String KEY_ENDERECO = "endereco";  
  
//  CAMPOS DA TABELA CARROS   
    public static final String KEY_IDCARRO = "_id";  
    public static final String KEY_IDCLIENTE = "id_cliente";  
    public static final String KEY_MODELO = "modelo";  
    public static final String KEY_PLACA = "placa";  
  
private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE_CLIENTES + " ("  
    + KEY_IDCLI + " integer primary key autoincrement, "  
    + KEY_NOME + " text, "  
    + KEY_ENDERECO + " text); create table " + DATABASE_TABLE_CARROS + " ("  
    + KEY_IDCARRO + " integer primary key autoincrement, "  
    + KEY_IDCLIENTE + ", integer"  
    + KEY_MODELO + " text, "  
    + KEY_PLACA + "text) , FOREIGN KEY ( id_cliente) REFERENCES clientes (_id) ON DELETE RESTRICT ON UPDATE CASCADE);";  

    public static void main (String[] args) {
        System.out.println (DATABASE_CREATE);
    }
}

Veja qual é a saída desse programa. Só de olhar você vai ver que tem coisa errada. Se não conseguir enxergar isso, pegue algum programa que crie tabelas SQLite no Windows mesmo, para ver se a sintaxe está correta.

Mudei agora, fiz assim:

//  CRIA A TABELA CLIENTES
      private static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("
      + KEY_IDCLI + " integer primary key autoincrement, "
      + KEY_NOME + " text, "
      + KEY_ENDERECO + " text);";
      
//  CRIA A TABELA CARROS
      private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("
      + KEY_IDCARRO + " integer primary key autoincrement, "
      + KEY_IDCLIENTE + " integer, "
      + KEY_MODELO + " text, "
      + KEY_PLACA + "text), FOREIGN KEY (id_cliente) REFERENCES clientes (_id) ON DELETE RESTRICT ON UPDATE CASCADE);";


db.execSQL(DATABASE_CREATE_CLIENTES);
db.execSQL(DATABASE_CREATE_CARROS);

Ta dando esse erro:
08-21 14:49:37.036: E/Database(458): Failure 1 (near “,”: syntax error) on 0x267aa8 when preparing ‘create table carros (_id integer primary key autoincrement, id_cliente integer, modelo text, placatext), FOREIGN KEY (id_cliente) REFERENCES clientes (_id) ON DELETE RESTRICT ON UPDATE CASCADE);’.

Eu gravo o veículo e quando consulto não vem nada… O que estou fazendo de errado?

//  CRIA A TABELA CLIENTES
	private static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("
	+ KEY_IDCLI + " integer primary key autoincrement, "
	+ KEY_NOME + " text, "
	+ KEY_ENDERECO + " text);";

//  CRIA A TABELA CARROS
	private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("
	+ KEY_IDCARRO + " integer primary key autoincrement, "
	+ KEY_MODELO + " text, "
	+ KEY_PLACA + ", text, "
	+ KEY_IDCLIENTE + " integer);";

	// Grava carro
	public long gravarCarroCliente(String modelo, String placa){
		ContentValues valores = new ContentValues();
//		valores.put(KEY_IDCLIENTE, idcliente);
		valores.put(KEY_MODELO, modelo);
		valores.put(KEY_PLACA, placa);
		
		return mDb.insert(DATABASE_TABLE_CARROS, null, valores);
	}


	
	//eu que fiz essa
	public Cursor getCarroPorPlaca(String nomeString){
		String[] selectionArgs = {nomeString + "%"};  
		return mDb.rawQuery("SELECT * FROM clientes WHERE nome like ?", selectionArgs);
//		return mDb.rawQuery("SELECT placa, modelo, nome FROM clientes INNER JOIN carros ON clientes._id = carros.id_cliente WHERE placa like ?", selectionArgs);
	}


		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(DATABASE_CREATE_CLIENTES);
			db.execSQL(DATABASE_CREATE_CARROS);
		}

Aqui eu gravo:

mDb.gravarCarroCliente(modeloString, placaString);

Olá pessoal, estou com o mesmo problema! Conseguiu resolver fbrigatt?

att,
Andreia

Qual o seu problema? Faz tanto tempo que já nem lembro mais desse post. Fiz um outro que ta funcionando. O que você precisa, andreia_android?