Android SQLite INSERT - PullRequest
       3

Android SQLite INSERT

6 голосов
/ 07 сентября 2011

Я использую 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);";

Выдает исключение "Пустые bindArgs"

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

Ответы [ 2 ]

11 голосов
/ 07 сентября 2011

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

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).

8 голосов
/ 07 сентября 2011

Попробуйте выполнить 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...