我曾经在我的sqlite数据库中插入2个值/列(坐标/标记以在地图上显示它们),今天我想添加另一列,我像往常一样添加它但是当想要启动地图活动时我有一个logcat错误如:
08-23 13:27:30.001: ERROR/Database(300): android.database.sqlite.SQLiteException: no such table: coord: , while compiling: INSERT INTO coord(longitude, latitude, description) VALUES(?, ?, ?);
要创建db +表,我正在使用此代码:
公共类MaBaseSQLite扩展了SQLiteOpenHelper {
private static final String TABLE_COORD = "coord";
private static final String COL_ID = "ID";
private static final String COL_LATI = "latitude";
private static final String COL_LONGI = "longitude";
private static final String COL_DESCRI = "description";
private static final String DATABASE_NAME = "coord.db";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_BDD = "CREATE TABLE " + TABLE_COORD + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_LATI + " TEXT NOT NULL, "
+ COL_LONGI + " TEXT NOT NULL, " + COL_DESCRI + "TEXT NOT NULL);";
MaBaseSQLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//on créé la table à partir de la requête écrite dans la variable CREATE_BDD
db.execSQL(CREATE_BDD);
}
要在其他类中插入我正在使用此代码的值:
public long insertCoordo(Coordo coordo){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
values.put(COL_LATI, coordo.getlati());
values.put(COL_LONGI, coordo.getlongi());
values.put(COL_DESCRI, coordo.getdescri());
//on insère l'objet dans la BDD via le ContentValues
return bdd.insert(TABLE_COORD, null, values);
}
添加示例:
Coordo coordo = new Coordo(36.876673,10.325928, "TOTAL La Marsa");
CoordBd.insertCoordo(coordo);
坐标在coordo()类中的代码中提到了3个值:
public Coordo(Double lati, Double longi,String descri){
this.lati = lati;
this.longi = longi;
this.descri= descri;
}
这可能是什么问题?为什么它不能在表上插入值因为它找不到它? 谢谢你的帮助。
答案 0 :(得分:1)
将数据库版本值更改为另一个,然后编译并运行
private static final int DATABASE_VERSION = 1; /// change the version here
答案 1 :(得分:1)
删除;从create table语句的末尾开始。我敢打赌你的create语句失败了,而且这个数据库不存在 - 正如SQLite试图告诉你的那样。
另外:为什么在Double值中使用Text列?
我建议您阅读一个小型SQL教程。
答案 2 :(得分:1)
在SQLite中添加一个列不仅仅是更改SQL命令来创建它。您必须在onUpgrade中再次ALTER
或DROP
以及CREATE
。
然后,如果您在TEXT
中存储双打,则可能会遇到问题。 REAL
更适应。
答案 3 :(得分:1)
在TEXT之前的字符串文字中需要一个空格:
+ COL_DESCRI + "TEXT NOT NULL);";
应该是:
+ COL_DESCRI + " TEXT NOT NULL);";