Android SQLite INSERT

Я использую execSQL в базе данных SQLite. Sql INSERT strnig – это

INSERT INTO Tasks (_id, Aircraft, Station, Discrepancy,DateCreated, CreatedBy, Status, DateClosed, ClosedBy, ArrivalFlightID, RecordChangedByUI) VALUES ('271104',' ','ORD','Critical Flight (0496/28)','9/4/2011 6:57:00 PM','SYSTEM','NEW','','null','0','N') 

Таблица

 "create table Tasks (_id integer primary key, " + "Aircraft text null, Station text null, Discrepancy text null, DateCreated text null, CreatedBy text null, Status text null, DateClosed text, ClosedBy text null, ArrivalFlightID text null, RecordChangedByUI text null);"; 

Это бросает исключение «Empty bindArgs»

Может ли кто-нибудь сказать мне, где я ошибаюсь?

Solutions Collecting From Web of "Android SQLite INSERT"

Вы не можете передать null как второй параметр. Если вы не используете его, просто игнорируйте его, и он будет работать:

 String sql = "INSERT INTO Tasks (_id, Aircraft, Station, Discrepancy,DateCreated, CreatedBy, Status, DateClosed, ClosedBy, ArrivalFlightID, RecordChangedByUI) " VALUES ('" + tasks[i]._id + "','" + tasks[i].Aircraft + "','" + tasks[i].Station + "','" + tasks[i].Discrepancy + "','" + tasks[i].DateCreated + "','" + tasks[i].CreatedBy + "','" + tasks[i].Status + "','" + tasks[i].DateClosed + "','" + tasks[i].ClosedBy + "','" + tasks[i].ArrivalFlightID + "','N')"; this.database.execSQL(sql); 

Однако приведенный выше пример уязвим – запрос SQL может быть легко введен. Все строки, переданные в запрос, должны быть экранированы через DatabaseUtils.sqlEscapeString(task[i].something) .

Попробуйте выполнить database.insert или insertOrThrow. Для этого требуется явное добавление каждого поля к объекту ContentValues, но оно настолько аккуратно.

 ContentValues insertValues = new ContentValues(); insertValues.put("_id", tasks[i]._id); ... // other fields long rowId = this.database.insert(DATABASE_TABLE, null, insertValues);