android.database.sqlite.SQLiteException: нет такого столбца: статус (код 1) [дубликат]

Вместо того, чтобы бросать код на вас, есть два понятия, которые являются ключом к пониманию того, как JS обрабатывает обратные вызовы и асинхронность. (это даже слово?)

Модель цикла события и параллелизма

Есть три вещи, о которых вам нужно знать; Очередь; цикл события и стек

. В широких упрощенных терминах цикл событий подобен диспетчеру проекта, он постоянно прослушивает любые функции, которые хотят запускать и взаимодействовать между очереди и стека.

while (queue.waitForMessage()) {
   queue.processNextMessage();
}

Как только он получает сообщение для запуска чего-то, он добавляет его в очередь. Очередь - это список вещей, которые ждут выполнения (например, ваш запрос AJAX). Представьте себе это так:

 1. call foo.com/api/bar using foobarFunc
 2. Go perform an infinite loop
 ... and so on

Когда одно из этих сообщений будет исполнено, оно выталкивает сообщение из очереди и создает стек, стек - это все, что нужно выполнить JS для выполнения инструкции в сообщение. Таким образом, в нашем примере ему говорят позвонить foobarFunc

function foobarFunc (var) {
  console.log(anotherFunction(var));
}

. Так что все, что foobarFunc должно выполнить (в нашем случае anotherFunction), будет вставлено в стек. исполняемый, а затем забытый - цикл события затем переместится на следующую вещь в очереди (или прослушивает сообщения)

. Главное здесь - порядок выполнения. Это

КОГДА что-то будет запущено

Когда вы совершаете вызов с использованием AJAX для внешней стороны или выполняете любой асинхронный код (например, setTimeout), Javascript зависит от ответ, прежде чем он сможет продолжить.

Большой вопрос, когда он получит ответ? Ответ в том, что мы не знаем, поэтому цикл событий ждет, когда это сообщение скажет: «Эй, забери меня». Если JS просто ждал этого сообщения синхронно, ваше приложение замерзнет, ​​и оно сосать. Таким образом, JS продолжает выполнение следующего элемента в очереди, ожидая, пока сообщение не будет добавлено обратно в очередь.

Вот почему с асинхронной функциональностью мы используем вещи, называемые обратными вызовами. Это похоже на обещание буквально. Как и в I , обещание что-то вернуть в какой-то момент jQuery использует специальные обратные вызовы, называемые deffered.done deffered.fail и deffered.always (среди других). Вы можете увидеть их все здесь

Итак, вам нужно передать функцию, которая в какой-то момент будет выполнена с переданными ей данными.

Поскольку обратный вызов не выполняется немедленно, но в более позднее время важно передать ссылку на функцию, которую она не выполнила. поэтому

function foo(bla) {
  console.log(bla)
}

, поэтому большую часть времени (но не всегда) вы пройдете foo не foo()

. Надеюсь, это будет иметь смысл. Когда вы сталкиваетесь с такими вещами, которые кажутся запутанными, я настоятельно рекомендую полностью прочитать документацию, чтобы хотя бы понять ее. Это сделает вас намного лучшим разработчиком.

2
задан JP88 27 August 2013 в 15:36
поделиться

4 ответа

Существует проблема, что вы пропустили пробел в Key_basal, а также добавили дополнительную запятую в конце вашего метода onCreate. Ваш код:

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
        + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
        + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
        + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
        + " REAL NOT NULL," + KEY_BASAL + "REAL NOT NULL," + ")";

db.execSQL(CREATE_MEASURES_TABLE);
}

Он должен быть:

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
        + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
        + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
        + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
        + " REAL NOT NULL," + KEY_BASAL + " REAL NOT NULL" + ")";

db.execSQL(CREATE_MEASURES_TABLE);
}
2
ответ дан arshu 26 August 2018 в 07:23
поделиться

Удалить , Конец запроса

KEY_BASAL + "REAL NOT NULL," + ")";
                          ^
                          | Here

И использовать пробел для строк Concat

KEY_BASAL + "REAL NOT NULL," + ")";
             ^
             | Here

GoodLuck

1
ответ дан HamidReza Heydari 26 August 2018 в 07:23
поделиться

Я получил эту ошибку при использовании тестов junit. И моя ошибка была простой, но злой.

Я смешал getContext() и getMockConetext().

1
ответ дан Infinite Recursion 26 August 2018 в 07:23
поделиться

Используйте пробел после столбца KEY_BASAL. Поскольку имя столбца таблицы неверно, таблица была создана без этого столбца. Поэтому после изменения кода переустановите свою базу данных или измените версию. Затем вы получите правильную таблицу со столбцами

String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
            + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
            + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
            + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
            + " REAL NOT NULL," + KEY_BASAL + " REAL NOT NULL" + ")";


if (cursor != null && cursor .getCount()>0){

        cursor.moveToFirst();

///

}
5
ответ дан Mohammod Hossain 26 August 2018 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: