2017-02-05 6 views
0

При попытке вставить новую запись в базу данных SQLite в Android вставка завершилась неудачно из-за синтаксической ошибки. Похоже, что сформированный запрос не содержит значений, добавленных в экземпляр ContentValues, но я не уверен, почему. Может ли кто-нибудь указать мне на ошибку?Вставка в SQLite DB сбой с использованием ContentValues ​​

Вот сообщение об ошибке:

E/SQLiteLog: (1) near "TEXT": syntax error 
E/SQLiteDatabase: Error inserting TIME_DATE TEXT=barbaz TRANSCRIPT TEXT=foobar 
android.database.sqlite.SQLiteException: near "TEXT": syntax error (code 1): , while compiling: INSERT INTO approvals_t(TIME_DATE TEXT,TRANSCRIPT TEXT) VALUES (?,?) 

А вот код, я использую, чтобы проверить:

public boolean insertData(String transStr, String timeStr) { 

SQLiteDatabase db = this.getWritableDatabase(); 

ContentValues cValues = new ContentValues(); 
cValues.put(TRANS_COL,"foobar"); 
cValues.put(TIME_COL,"barbaz"); 

// res is -1, the values couldn't be inserted 
long res = db.insert(APVLS_TABLE_NAME,null,cValues); 

if(res != -1) 
    return true; 
else 
    return false; 
} 

(Edit) Остальная часть кода

public class DBHelper extends SQLiteOpenHelper implements BaseColumns { 

public static final String DB_NAME = "Transcripts.db"; 
public static final String APVLS_TABLE_NAME = "approvals_t"; 
public static final String ID_COL = BaseColumns._ID; 
public static final String TRANS_COL = "TRANSCRIPT TEXT"; 
public static final String TIME_COL = "TIMEDATE TEXT"; 

public DBHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // Create a sql command that builds a table 
    String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " (" 
      + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + TRANS_COL + ", " 
      + TIME_COL + ");"; 

    // Execute sql statement 
    db.execSQL(SQL_CREATE_APVLS_TABLE); 
} 
+0

Не могли бы вы разместить свой метод create table и объявление переменных? – KoalaKoalified

+0

@ KoalaKoalified Np, сделано. –

+1

@VictorBrunell Проблема в том, что при вставке используются константы TRANS_COL и TIME_COL. И эти константы имеют ТИП поля в таблице, а вставка должна содержать только имя поля, а не имя и тип. – Jonas452

ответ

2

Изменения в ваших декларациях:

public static final String TRANS_COL = "TRANSCRIPT"; 
public static final String TIME_COL = "TIMEDATE"; 

Для вашего создания таблицы:

String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " (" 
     + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + TRANS_COL + " TEXT, " 
     + TIME_COL + " TEXT);"; 

Причины ее не работает, что вы приложили TEXT к тем переменным, что делает поле с названиями типа TEXT, но не включать слова «TEXT» в конце имени столбца, ergo вы не можете выбрать из столбца с именем «TRANSCRIPT TEXT».

Кроме того, некоторые другие изменения, которые я хотел бы предложить это изменить это:

public DBHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

To:

private static final int dbVersion = 1; 

public DBHelper(Context context) { 
    super(context, DB_NAME, null, dbVersion); 
} 

который гарантирует, если вы хотите изменить свои версии, это просто изменив переменную вместо конструктора.

и при тестировании после данных Резервное копирование:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + APVLS_TABLE_NAME); 
    onCreate(db); 
} 

EDIT:

Также вы собираетесь столкнуться с некоторыми проблемами при вставке в конце концов ... убедитесь, что ваш по умолчанию идентификатор класса вашего вставляя через -1 поэтому ID переопределена с помощью следующего приращения и изменить вставки заявление:

db.insertWithOnConflict(TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); 

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

+0

Спасибо. Это работало как шарм. –

+0

Отлично, добро пожаловать. – KoalaKoalified

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

  • Нет связанных вопросов^_^