Android: E / SQLiteDatabase: Ошибка вставки; android.database.sqlite.SQLiteException: такого столбца нет - PullRequest
0 голосов
/ 16 мая 2018

Друзья! Я пытаюсь заполнить простую базу данных из XML-файла, но получаю ошибку в заголовке, и, как написано в журнале, значения в столбцах расположены в неправильном порядке.

Я не могу понять, где проблема, поэтому я прошу вашей помощи. Код ниже. Большое спасибо.

XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<cards>
    <record path="R.mipmap.ot1"  woman = "wfew" man = "qwe"/>
    <record path="R.mipmap.ot2"  woman = "rewr" man = "dwd"/>
</cards>

DBhelper класс:

class DBHelper extends SQLiteOpenHelper {


    public DBHelper(Context context) {

        super(context, "myDB", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(LOG_TAG, "--- onCreate database ---");

        db.execSQL("create table mytable ("
                + "id integer primary key autoincrement,"
                + "path text,"
                + "woman text," + "man text" + ");");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Добавление данных в базу данных:

 Resources res = this.getResources();
    ContentValues values = new ContentValues();

    XmlResourceParser _xml = res.getXml(R.xml.cardslist);
    try {

        int eventType = _xml.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {

            if ((eventType == XmlPullParser.START_TAG)
                    && (_xml.getName().equals("record"))) {

                String path = _xml.getAttributeValue(0);
                String woman = _xml.getAttributeValue(1);
                String man = _xml.getAttributeValue(2);
                values.put("path", path);
                values.put("woman", woman);
                values.put("man", man);
                db.insert("mytable", null, values);
                Log.d(LOG_TAG, "success");
            }
            eventType = _xml.next();
        }
    }
    // Catch errors
    catch (XmlPullParserException e) {
        Log.e("Test", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("Test", e.getMessage(), e);

    } finally {
        // Close the xml file
        _xml.close();
    }



    dbHelper.close();
}

Ошибка из журнала:

E/SQLiteLog: (1) table mytable has no column named man
E/SQLiteDatabase: Error inserting path=dwd woman=R.mipmap.ot2 man=rewr
                  android.database.sqlite.SQLiteException: table mytable has no column named man (code 1): , while compiling: INSERT INTO mytable(path,woman,man) VALUES (?,?,?)

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы должны удалить свое приложение и затем установить его снова, потому что, вероятно, вы изменили схему базы данных, и в вашем onUpgrade вы не увеличиваете номер версии, взгляните на эту ссылку , чтобы понять что делать при изменении схемы

0 голосов
/ 16 мая 2018
  • Добавить CREATE TABLE IF NOT EXISTS
  • Удалить несколько ;

Попробуйте так, просто исправьте ваше execSQL заявление.

 String sqlStatement = "CREATE TABLE IF NOT EXISTS mytable( id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT, woman TEXT, man TEXT)";
  db.execSQL(sqlStatement);

Примечание

Если возникает такая же проблема, вам нужно изменить

   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // ALTER TABLE LOGIC
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...