Вопрос:

Исключение SQLite: такой столбец не найден (идентификатор первичного ключа)

java android sqlite

12 просмотра

1 ответ

14 Репутация автора

У меня есть две таблицы в моей базе данных, и я использую внутреннее соединение, чтобы распечатать данные в LogCat, которые удовлетворяют условиям. Я уверен, что это просто глупая ошибка.

Вызванный:

Caused by: android.database.sqlite.SQLiteException: no such column: position.id (code 1 SQLITE_ERROR): , while compiling: select people.name as Name, position.name as Position, salary as Salary from people inner join position on people.posid = position.id where salary > ?

Как я создаю две таблицы:

public static final String TABLE_POSITION = "position";
public static final String TABLE_PEOPLE = "people";

public static final String KEY_ID = "id";
public static final String KEY_NAME = "name";

public static final String KEY_SALARY = "salary";
public static final String KEY_POSID = "posid";


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_POSITION + "(" + KEY_ID + " integer primary key," + KEY_NAME + " text," + KEY_SALARY + " integer" + ");");
    db.execSQL("create table " + TABLE_PEOPLE + "(" + KEY_ID + " integer primary key autoincrement," + KEY_NAME + " text," + KEY_POSID + " integer" + ");");
}

Как мне заполнить таблицу позиций:

cursor = sqLiteDatabase.query(databaseHelper.TABLE_POSITION,null,null,null,null,null,null);
    if(cursor.getCount() == 0){
        for(int i = 0; i < position_id.length; i++){
            contentValues.put(databaseHelper.KEY_ID,position_id[i]);
            contentValues.put(databaseHelper.KEY_NAME,position_name[i]);
            contentValues.put(databaseHelper.KEY_SALARY,position_salary[i]);
            sqLiteDatabase.insert(databaseHelper.TABLE_POSITION,null,contentValues);
        }
    }
    cursor.close();

Данные для таблицы позиций:

    int[] position_id = { 1, 2, 3, 4 };
    String[] position_name = { "CEO", "Programmer", "Teacher", "Policeman" };
    int[] position_salary = { 15000, 13000, 10000, 8000 };

Таблица данных для людей:

String[] people_name = { "Ivan", "Maria", "Petr", "Anton", "Daria", "Boris", "John", "Suzy" };
int[] people_posid = { 2, 3, 2, 2, 3, 1, 2, 4 };

Ошибка в этой строке:

String sqlQuery = "select people.name as Name, position.name as Position, salary as Salary from people inner join position on people.posid = position.id where salary > ?";
        cursor = sqLiteDatabase.rawQuery(sqlQuery,new String[]{"12000"});
        logCursor(cursor); //priting out cursor to LOG.d
        cursor.close();

Я знаю, что id без автоинкремента также является автоинкрементным, но я должен знать id в таблице позиции для внутреннего соединения, как я предлагаю. Итак, как решить эту ошибку? Я знаю, что это только ошибка первичного ключа / автоинкремента

Автор: Anime Knight Источник Размещён: 29.01.2019 09:12

Ответы (1)


0 плюса

14 Репутация автора

Решено people.posid = position._id .. Но нет данных в таблицах .. (после двух часов размышлений)

Автор: Anime Knight Размещён: 29.01.2019 09:19
Вопросы из категории :
32x32