想要在SQLite数据库上插入数据时没有这样的表

时间:2011-08-23 13:33:56

标签: android sqlite google-maps

我曾经在我的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;
    }

这可能是什么问题?为什么它不能在表上插入值因为它找不到它? 谢谢你的帮助。

4 个答案:

答案 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中再次ALTERDROP以及CREATE

然后,如果您在TEXT中存储双打,则可能会遇到问题。 REAL更适应。

答案 3 :(得分:1)

在TEXT之前的字符串文字中需要一个空格:
    + COL_DESCRI + "TEXT NOT NULL);";
应该是:
    + COL_DESCRI + " TEXT NOT NULL);";