Нет такой таблицы при желании вставить данные в базу данных SQLite - PullRequest
0 голосов
/ 23 августа 2011

Раньше я вставлял 2 значения / столбца в свою базу данных sqlite (координаты / маркеры, чтобы показать их на карте), сегодня я хотел добавить еще один столбец, я добавил его, как обычно, но когда я хочу запустить действие карты, у меня есть 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(?, ?, ?);

Для создания таблицы БД + я использую этот код:

открытый класс 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);

И координаты имеют 3 значения, как указано в этом коде в классеordino ():

public Coordo(Double lati, Double longi,String descri){
        this.lati = lati;
        this.longi = longi;
        this.descri= descri;
    }

В чем может быть проблема с этим? Почему он не может вставить значения в таблицу, потому что он не может его найти? Спасибо за помощь.

Ответы [ 4 ]

1 голос
/ 23 августа 2011

Вам нужен пробел в строковом литерале непосредственно перед ТЕКСТОМ:
+ COL_DESCRI + "TEXT NOT NULL);";
должно быть:
+ COL_DESCRI + " TEXT NOT NULL);";

1 голос
/ 23 августа 2011

Удалить;с конца вашей инструкции создания таблицы.Могу поспорить, что ваш оператор создания не удался, и эта база данных не существует - как SQLite пытается вам сказать.

Кроме того: Почему вы используете столбцы Text для ваших значений Double?

Я бы предложилпройти небольшой учебник по SQL.

1 голос
/ 23 августа 2011

Добавление столбца в SQLite - это не просто изменение команды SQL для его создания.Вы должны либо ALTER it, либо DROP it, либо CREATE it снова в своем onUpgrade.

Тогда у вас могут возникнуть проблемы, если вы храните double в TEXT.REAL более адаптирован.

1 голос
/ 23 августа 2011

изменить значение версии базы данных на другое, а затем скомпилировать и запустить

private static final int DATABASE_VERSION = 1; /// change the version here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...