2016-06-16 2 views
0

Внутри события onClick(), я пытаюсь увеличить значение счетчика на 1 в столбце CARDNUM в таблице базы данных SQLite (TOTALCOUNT) с помощью команды INSERT INTO.Как исправить ошибку синтаксиса в команде INSERT INTO?

Ошибка возникает при попытке запустить:

db.execSQL(INCREMENT_COUNT2); 

Android Studio выдает следующее сообщение об ошибке

"SQLiteException: near "cardnum": syntax error (code 1): , while compiling: INSERT INTO totalcount(cardnum) VALUES cardnum+1" 

Что я здесь отсутствует?
Есть ли лучший способ достичь приращения INSERTION?

DatabaseHelper.java файл:

// Increment the counter in the TOTALCOUNT Table in the database. 
public void insertIntoTableTOTALCOUNT() { 

    // Get a reference to a writable DB 
    SQLiteDatabase db = this.getWritableDatabase(); 

    db.beginTransaction(); 

    db.execSQL(INCREMENT_COUNT1); 
    db.execSQL(INCREMENT_COUNT2); 

    db.setTransactionSuccessful(); 
    db.endTransaction(); 

    if(db.isOpen()) 
     db.close(); 
    } 

// Set the counter to a default value of zero. 
public static final String INCREMENT_COUNT1 = " INSERT OR IGNORE INTO " + TABLE_NAME_TOTALCOUNT + 
    "(" + COLUMN_NAME_CARDNUM+")" + " VALUES (0)"; 

// Increment the Cardnum count by +1 for each onClick. 
public static final String INCREMENT_COUNT2 = "INSERT INTO " + TABLE_NAME_TOTALCOUNT + "(" + COLUMN_NAME_CARDNUM+") VALUES " + COLUMN_NAME_CARDNUM +"+1"; 

ответ

0
public static final String INCREMENT_COUNT2 = "INSERT INTO " + TABLE_NAME_TOTALCOUNT + "(" + COLUMN_NAME_CARDNUM+") VALUES (" + (COLUMN_NAME_CARDNUM=COLUMN_NAME_CARDNUM+1)+")"; 

// использовать это может быть, это будет разработана

+0

Сообщение об ошибке: «Невозможно присвоить значение для окончательной переменной„COLUMN_NAME_CARDNUM“ – AJW

+0

despaly мне сообщение об ошибке, пожалуйста .... –

+0

» Невозможно присвоить значение окончательной переменной „COLUMN_NAME_CARDNUM“. – AJW

0

Если я понял ваш вопрос правильно, я думаю, что вы хотите обновить значение COLUMN_NAME_CARDNUM с +1, а не INSERT - новая строка. Если это правильно, вы заявление должно быть

UPDATE TABLE_NAME_TOTALCOUNT SET COLUMN_NAME_CARDNUM=COLUMN_NAME_CARDNUM+1 WHERE <filter criteria> 

Если вы действительно хотите, чтобы вставить новую строку с COLUMN_NAME_CARDNUM + 1, то вы должны принести Мах COLUMN_NAME_CARDNUM из БД, а затем увеличить его и вставить

SELECT MAX(COLUMN_NAME_CARDNUM) FROM TABLE_NAME_TOTALCOUNT 

Затем увеличьте его на 1 и вставьте.

+0

Я ищу, чтобы вставить новую строку с +1. Поэтому я хочу взять значение последней ранее вставленной строки и добавить ее.Итак, вы рекомендуете использовать пример SELECT MAX? – AJW

+0

Да, правильно. Я не являюсь точной логикой COLUMN_NAME_CARDNUM, но если она должна быть равна +1, чем последняя вставленная строка (и, таким образом, уникальная), тогда вы должны сначала выбрать MAX, а затем увеличить это значение, а затем вставить. –

+0

Хорошо, я попробую. – AJW

0

не должно это быть

INCREMENT_COUNT2 = "INSERT INTO " + TABLE_NAME_TOTALCOUNT + "(" + COLUMN_NAME_CARDNUM+") VALUES (" + COLUMN_NAME_CARDNUM +"+1)" 
+0

сбой при работе с сообщением об ошибке: «no такой столбец: cardnum (код 1): при компиляции: INSERT INTO totalcount (cardnum) VALUES (cardnum + 1)« – AJW

1

Сделать метод передать значение Cardnum путем добавления или приращением 1. Затем запустите вставки запроса. Существует два типа запросов SQL для Insertion.

  1. Сырье Запрос Строка insertdata т.е. = "INSERT INTO" + TABLE_NAME_TOTALCOUNT + "(" + COLUMN_NAME_CARDNUM + ") ЗНАЧЕНИЯ" + COLUMN_NAME_CARDNUM + "+ 1";

  2. Другой заключается в использовании ContentValues:

    public void insertDatatoDatabase(String data1,String data2){ ContentValues values = new ContentValues(); values.put(COLUMN1, data1); values.put(COLUMN2, data2);db1.insert(TABLE_DETAIL, null, values); }

Вы добавляете +1 в строки "", где это Integer. Попробуйте добавить их в скобки или добавьте номер перед вставкой и отправьте его только из onclick.

2

Это правильная команда SQL:

public static final String INCREMENT_COUNT2 = "INSERT INTO " + TABLE_NAME_TOTALCOUNT + "(" + COLUMN_NAME_CARDNUM + ") VALUES (" + (COLUMN_NAME_CARDNUM + 1) + ")"; 

Но используя связанные параметры, будет лучшим выбором.

+0

Я попробую. Я никогда не использовал связанные параметры. Это минимизировать SQL-инъекцию? Можете ли вы указать на какие-либо хорошие ссылки, которые помогут рассказать мне о преимуществах их использования? – AJW

+1

Да, но не только. Это также освобождает вас от необходимости вставлять строки в кавычки или удваивать апострофы. Для справки: http://stackoverflow.com/questions/9857073/queries-with-prepared-statements-in-android –

Смежные вопросы