我在 Motodev 上的项目遇到了严重问题,我为 android 制作了一个 apk,现在我正在尝试在其上实现一个数据库,我正在使用教程进行构建,但我遇到了 2 个问题,只有 2 个表和 1 个数据库,就是这样:
public class VeiculoDAO {
public static final String NOME_TABELA ="Veiculo";
public static final String COLUNA_ID = "id";
public static final String COLUNA_MARCA = "marca";
public static final String COLUNA_MVEICULO = "mveiculo";
public static final String COLUNA_PLACA = "placa";
public static final String COLUNA_RENAVAM = "renavam";
public static final String COLUNA_TIPOVEICULO = "tipoveiculo";
public static final String SCRIPT_CRIACAO_TABELA_VEICULOS = "CREATE TABLE " + NOME_TABELA + "("
+ COLUNA_ID + " INTEGER PRIMARY KEY," + COLUNA_MARCA + " TEXT," + COLUNA_PLACA + " TEXT,"
+ COLUNA_RENAVAM + " TEXT," + COLUNA_MVEICULO + " TEXT," + COLUNA_TIPOVEICULO + " TEXT" + ")";
public static final String SCRIPT_DELECAO_TABELA = "DROP TABLE IF EXISTS " + NOME_TABELA;
private SQLiteDatabase dataBase = null;
private static VeiculoDAO instance;
public static VeiculoDAO getInstance(Context context) {
if(instance == null)
instance = new VeiculoDAO(context);
return instance;
}
private VeiculoDAO(Context context) {
PersistenceHelper persistenceHelper = PersistenceHelper.getInstance(context);
dataBase = persistenceHelper.getWritableDatabase();
}
public void salvar(Veiculo veiculo) {
ContentValues values = gerarContentValeuesVeiculo(veiculo);
dataBase.insert(NOME_TABELA, null, values);
}
public List<Veiculo> recuperarTodos() {
String queryReturnAll = "SELECT * FROM " + NOME_TABELA;
Cursor cursor = dataBase.rawQuery(queryReturnAll, null);
List<Veiculo> veiculos = construirVeiculoPorCursor(cursor);
return veiculos;
}
public void deletar(Veiculo veiculo) {
String[] valoresParaSubstituir = {
String.valueOf(veiculo.getId())
};
dataBase.delete(NOME_TABELA, COLUNA_ID + " = ?", valoresParaSubstituir);
}
public void editar(Veiculo veiculo) {
ContentValues valores = gerarContentValeuesVeiculo(veiculo);
String[] valoresParaSubstituir = {
String.valueOf(veiculo.getId())
};
dataBase.update(NOME_TABELA, valores, COLUNA_ID + " = ?", valoresParaSubstituir);
}
public void fecharConexao() {
if(dataBase != null && dataBase.isOpen())
dataBase.close();
}
private List<Veiculo> construirVeiculoPorCursor(Cursor cursor) {
List<Veiculo> veiculos = new ArrayList<Veiculo>();
if(cursor == null)
return veiculos;
try {
if (cursor.moveToFirst()) {
do {
int indexID = cursor.getColumnIndex(COLUNA_ID);
int indexMarca = cursor.getColumnIndex(COLUNA_MARCA);
int indexRenavam = cursor.getColumnIndex(COLUNA_RENAVAM);
int indexMveiculo = cursor.getColumnIndex(COLUNA_MVEICULO);
int indexTipoveiculo = cursor.getColumnIndex(COLUNA_TIPOVEICULO);
int id = cursor.getInt(indexID);
String marca = cursor.getString(indexMarca);
String placa = cursor.getString(indexPlaca);
String renavam = cursor.getString(indexRenavam);
String mveiculo = cursor.getString(indexMveiculo);
String tipoveiculo = cursor.getString(indexTipoveiculo);
Veiculo veiculo = new Veiculo(id, marca, placa, renavam, mveiculo, tipoveiculo);
veiculos.add(veiculo);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
return veiculos;
}
private ContentValues gerarContentValeuesVeiculo(Veiculo veiculo) {
ContentValues values = new ContentValues();
values.put(COLUNA_ID, veiculo.getId());
values.put(COLUNA_MARCA, veiculo.getMarca());
values.put(COLUNA_PLACA, veiculo.getPlaca());
values.put(COLUNA_RENAVAM, veiculo.getRenavam());
values.put(COLUNA_MVEICULO, veiculo.getMveiculo());
values.put(COLUNA_TIPOVEICULO, veiculo.getTipoveiculo());
return values; }
}
和另一个...
public class CadastroDAO {
public static final String NOME_TABELA ="Cadastro";
public static final String COLUNA_NOME = "nome";
public static final String COLUNA_TELEFONE = "telefone";
public static final String COLUNA_TELEFONEDISPOSITIVO = "telefoneDispositivo";
public static final String COLUNA_EMAIL = "email";
public static final String COLUNA_CPF = "cpf";
public static final String COLUNA_RG = "rg";
public static final String COLUNA_ENDERECO = "endereco";
public static final String COLUNA_CEP = "cep";
public static final String COLUNA_SENHA = "senha";
// public static final String COLUNA_ID = "id";
public static final String SCRIPT_CRIACAO_TABELA_CADASTROS = "CREATE TABLE " + NOME_TABELA + "("
+ COLUNA_CPF + " TEXT PRIMARY KEY," + COLUNA_NOME + " TEXT," + COLUNA_TELEFONE + " TEXT," + COLUNA_TELEFONEDISPOSITIVO + "
TEXT,"
+ COLUNA_EMAIL + " TEXT," + COLUNA_RG + " TEXT," + COLUNA_ENDERECO + " TEXT,"
+ COLUNA_CEP + " TEXT," + COLUNA_SENHA + " TEXT," + ")";
public static final String SCRIPT_DELECAO_TABELA = "DROP TABLE IF EXISTS " + NOME_TABELA;
private SQLiteDatabase dataBase = null;
private static CadastroDAO instance;
public static CadastroDAO getInstance(Context context) {
if(instance == null)
instance = new CadastroDAO(context);
return instance;
}
private CadastroDAO(Context context) {
PersistenceHelper persistenceHelper = PersistenceHelper.getInstance(context);
dataBase = persistenceHelper.getWritableDatabase();
}
public void salvar(Cadastro cadastro) {
ContentValues values = gerarContentValeuesCadastro(cadastro);
dataBase.insert(NOME_TABELA, null, values);
}
public List<Cadastro> recuperarTodos() {
String queryReturnAll = "SELECT * FROM " + NOME_TABELA;
Cursor cursor = dataBase.rawQuery(queryReturnAll, null);
List<Cadastro> cadastros = construirCadastroPorCursor(cursor);
return cadastros;
}
public void deletar(Cadastro cadastro) {
String[] valoresParaSubstituir = {
String.valueOf(cadastro.getCpf())
};
dataBase.delete(NOME_TABELA, COLUNA_CPF + " = ?", valoresParaSubstituir);
}
public void editar(Cadastro cadastro) {
ContentValues valores = gerarContentValeuesCadastro(cadastro);
String[] valoresParaSubstituir = {
String.valueOf(cadastro.getCpf())
};
dataBase.update(NOME_TABELA, valores, COLUNA_CPF + " = ?", valoresParaSubstituir);
}
public void fecharConexao() {
if(dataBase != null && dataBase.isOpen())
dataBase.close();
}
private List<Cadastro> construirCadastroPorCursor(Cursor cursor) {
List<Cadastro> cadastros = new ArrayList<Cadastro>();
if(cursor == null)
return cadastros;
try {
if (cursor.moveToFirst()) {
do {
int indexNome = cursor.getColumnIndex(COLUNA_NOME);
int indexTelefone = cursor.getColumnIndex(COLUNA_TELEFONE);
int indexTelefoneDisposivo = cursor.getColumnIndex(COLUNA_TELEFONEDISPOSITIVO);
int indexEmail = cursor.getColumnIndex(COLUNA_EMAIL);
int indexCpf = cursor.getColumnIndex(COLUNA_CPF);
int indexRg = cursor.getColumnIndex(COLUNA_RG);
int indexEndereco = cursor.getColumnIndex(COLUNA_ENDERECO);
int indexCep = cursor.getColumnIndex(COLUNA_CEP);
int indexSenha = cursor.getColumnIndex(COLUNA_SENHA); // int
indexId = cursor.getColumnIndex(COLUNA_ID);
String nome = cursor.getString(indexNome);
String telefone = cursor.getString(indexTelefone);
String telefoneDispositivo = cursor.getString(indexTelefoneDisposivo);
String email = cursor.getString(indexEmail);
String cpf = cursor.getString(indexCpf);
String rg = cursor.getString(indexRg);
String endereco = cursor.getString(indexEndereco);
String cep = cursor.getString(indexCep);
String senha = cursor.getString(indexSenha); // int id = cursor.getInt(indexId);
Cadastro cadastro = new Cadastro(nome, telefone, telefoneDispositivo, email, cpf,
rg, endereco, cep, senha);
cadastros.add(cadastro);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
return cadastros;
}
private ContentValues gerarContentValeuesCadastro(Cadastro cadastro) {
ContentValues values = new ContentValues();
values.put(COLUNA_NOME, cadastro.getNome());
values.put(COLUNA_TELEFONE, cadastro.getTelefone());
values.put(COLUNA_TELEFONEDISPOSITIVO, cadastro.getTelefoneDispositivo());
values.put(COLUNA_EMAIL, cadastro.getEmail());
values.put(COLUNA_CPF, cadastro.getCpf());
values.put(COLUNA_RG, cadastro.getRg());
values.put(COLUNA_ENDERECO, cadastro.getEndereco());
values.put(COLUNA_CEP, cadastro.getCep());
values.put(COLUNA_SENHA, cadastro.getSenha()); // values.put(COLUNA_ID, cadastro.getVeiculo().getId());
return values;
}
}
我也使用了一个 Persistence Helper ......
public class PersistenceHelper extends SQLiteOpenHelper {
public static final String NOME_BANCO = "ExemploVeiculo";
public static final int VERSAO = 2;
//Declaração de Variáveis do bd tabela Cadastro
public static final String NOME_TABELA_1 = "Cadastro";
public static final String COLUNA_NOME = "nome";
public static final String COLUNA_TELEFONE = "telefone";
public static final String COLUNA_TELEFONEDISPOSITIVO = "telefoneDispositivo";
public static final String COLUNA_EMAIL = "email";
public static final String COLUNA_CPF = "cpf";
public static final String COLUNA_RG = "rg";
public static final String COLUNA_ENDERECO = "endereco";
public static final String COLUNA_CEP = "cep";
public static final String COLUNA_SENHA = "senha";
public static final String SCRIPT_CRIACAO_TABELA_CADASTROS = "CREATE TABLE " + NOME_TABELA_1 + "("
+ COLUNA_CPF + " TEXT PRIMARY KEY," + COLUNA_NOME + " TEXT," + COLUNA_TELEFONE + " TEXT,"+ COLUNA_TELEFONEDISPOSITIVO + "
TEXT,"
+ COLUNA_EMAIL + " TEXT," + COLUNA_RG + " TEXT," + COLUNA_ENDERECO + " TEXT,"
+ COLUNA_CEP + " TEXT," + COLUNA_SENHA + " TEXT" + ")";
public static final String SCRIPT_DELECAO_TABELA_1 = "DROP TABLE IF EXISTS " + NOME_TABELA_1;
//Declaração de Variáveis do bd tabela Veiculo
public static final String NOME_TABELA_2 = "Veiculo";
public static final String COLUNA_ID = "id";
public static final String COLUNA_MARCA = "marca";
public static final String COLUNA_MVEICULO = "mveiculo";
public static final String COLUNA_PLACA = "placa";
public static final String COLUNA_RENAVAM = "renavam";
public static final String COLUNA_TIPOVEICULO = "tipoveiculo";
public static final String SCRIPT_CRIACAO_TABELA_VEICULOS = "CREATE TABLE " + NOME_TABELA_2 + "("
+ COLUNA_ID + " INTEGER PRIMARY KEY," + COLUNA_MARCA + " TEXT," + COLUNA_PLACA + " TEXT,"
+ COLUNA_RENAVAM + " TEXT," + COLUNA_MVEICULO + " TEXT," + COLUNA_TIPOVEICULO + " TEXT" + ")";
public static final String SCRIPT_DELECAO_TABELA_2 = "DROP TABLE IF EXISTS " + NOME_TABELA_2;
private static PersistenceHelper instance;
private PersistenceHelper(Context context) {
super(context, NOME_BANCO, null, VERSAO);
}
@Override
public void onCreate(SQLiteDatabase db) {
if (db.isDbLockedByCurrentThread()){
Log.d(TAG, "Database locked by current thread...");
}
if (db.isOpen()){
Log.d(TAG, "OK.. Database open");
}
if (db.isReadOnly()){
Log.e(TAG, "The database is read only");
}
if (db.inTransaction()){
Log.e(TAG, "Why id the databse in transaction???");
}
Log.d(TAG, "Call to onCreate");
Log.d(TAG, "Creating table..." + SCRIPT_CRIACAO_TABELA_CADASTROS);
db.beginTransaction();
db.execSQL(SCRIPT_CRIACAO_TABELA_CADASTROS);
db.endTransaction();
Log.d(TAG, "Creating table..." + SCRIPT_CRIACAO_TABELA_VEICULOS);
db.beginTransaction();
db.execSQL(SCRIPT_CRIACAO_TABELA_VEICULOS);
db.endTransaction();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SCRIPT_DELECAO_TABELA_1);
db.execSQL(SCRIPT_DELECAO_TABELA_2);
onCreate(db);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
Log.d(TAG, "Opening the database... " + db.getPath() + " version " + db.getVersion());
}
public static PersistenceHelper getInstance(Context context) {
if(instance == null)
instance = new PersistenceHelper(context);
return instance;
}
private static final String TAG = "PersistenceHelper";
// @Override // public void onCreate(SQLiteDatabase db) { // db.execSQL(SCRIPT_CRIACAO_TABELA_CADASTROS); //
db.execSQL(SCRIPT_CRIACAO_TABELA_VEICULOS); // // }
public List<Cadastro> listar() {
Cadastro d = new Cadastro();
ArrayList<Cadastro> lista = new ArrayList<Cadastro>();
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.query(NOME_TABELA_1, null, null, null, null, null, null);
if(c.getCount() > 0) {
c.moveToFirst();
while(!c.isAfterLast()){
d.setCpf(c.getString(0));
d.setNome(c.getString(1));
d.setTelefone(c.getString(2));
d.setTelefoneDispositivo(c.getString(3));
d.setEmail(c.getString(4));
d.setRg(c.getString(5));
d.setEndereco(c.getString(6));
d.setCep(c.getString(7));
d.setSenha(c.getString(8));
lista.add(d);
c.moveToNext();
}
}
db.close();
return lista;} }
但是 apk 无法正常工作,logcat 上出现此错误:
这里有表 veiculo 的问题:
D/PersistenceHelper(274): Creating
table...CREATE TABLE Cadastro(cpf TEXT PRIMARY KEY,nome TEXT,telefone
TEXT,telefoneDispositivo TEXT,email TEXT,rg TEXT,endereco TEXT,cep
TEXT,senha TEXT) 05-27 07:16:03.873: D/PersistenceHelper(274):
Creating table...CREATE TABLE Veiculo(id INTEGER PRIMARY KEY,marca
TEXT,placa TEXT,renavam TEXT,mveiculo TEXT,tipoveiculo TEXT) 05-27
07:16:03.915: D/PersistenceHelper(274): Opening the database...
/data/data/com.example.sgm/databases/ExemploVeiculo version 1 05-27
07:16:03.915: I/Database(274): sqlite returned: error code = 1, msg =
table Veiculo has no column named renavam 05-27 07:16:03.933:
E/Database(274): Error inserting placa=gjm id=1 marca=ad mveiculo=da
renavam=123 tipoveiculo=ptw 05-27 07:16:03.933: E/Database(274):
android.database.sqlite.SQLiteException: table Veiculo has no column
named renavam: , while compiling: INSERT INTO Veiculo(placa, id,
marca, mveiculo, renavam, tipoveiculo) VALUES(?, ?, ?, ?, ?, ?); 05-27
这里有表 cadastro 的问题
I/ActivityManager(58): Starting activity: Intent {
cmp=com.example.sgm/.Cadastro } 05-27 07:16:04.384:
I/ActivityManager(58): Displayed activity com.example.sgm/.Cadastro:
435 ms (total 435 ms) 05-27 07:16:04.623: D/dalvikvm(107):
GC_EXTERNAL_ALLOC freed 3136 objects / 114640 bytes in 311ms 05-27
07:16:14.344: D/dalvikvm(107): GC_EXTERNAL_ALLOC freed 2178 objects /
83016 bytes in 62ms 05-27 07:16:24.284: D/dalvikvm(107):
GC_EXTERNAL_ALLOC freed 783 objects / 40168 bytes in 99ms 05-27
07:16:27.924: D/dalvikvm(58): GREF has increased to 301 05-27
07:16:30.713: D/dalvikvm(107): GC_EXTERNAL_ALLOC freed 606 objects /
33672 bytes in 75ms 05-27 07:16:39.064: D/dalvikvm(107):
GC_EXTERNAL_ALLOC freed 3175 objects / 115360 bytes in 119ms 05-27
07:16:43.214: D/dalvikvm(274): GC_FOR_MALLOC freed 12100 objects /
506008 bytes in 119ms 05-27 07:16:44.204: I/Database(274): sqlite
returned: error code = 1, msg = no such table: Cadastro 05-27
07:16:44.204: E/Database(274): Error inserting cep=123456 email=jmg
telefone=321 rg=1234 cpf=12345 nome=adgp telefoneDispositivo=654
senha=bjt endereco=twp 05-27 07:16:44.204: E/Database(274):
android.database.sqlite.SQLiteException: no such table: Cadastro: ,
while compiling: INSERT INTO Cadastro(cep, email, telefone, rg, cpf,
nome, telefoneDispositivo, senha, endereco) VALUES(?, ?, ?, ?, ?, ?,
?, ?, ?);
所以有人帮忙吗?抱歉英语不好,但我不知道错误在哪里,我是新手,然后我把数据库的所有代码和一个重要的 logcat 代码,如果有人知道,我将非常感激。