Как использовать метод rawQuery () для вставки записи? - PullRequest
7 голосов
/ 19 сентября 2011

Мне нужно сохранить запись, используя метод rawQuery(), потому что я хочу вставить текущую дату и время (datetime()), но мне также нужно вставить строки, содержащие кавычки.

Итак, я написал этот код:

String sql="INSERT INTO sms VALUES ( null, ?1, ?2, ?3, datetime())";
dbw.rawQuery(sql, new String[]{str1,str2,str3});

Но это ничего не хранит ... что не так?

[EDIT]

Таким образом, я не получаю ошибок, но запись не вставляется.

String mitt="mitt", dest="dest", text="text";
String sql="INSERT INTO sms VALUES ( null, ?, ?, ?, datetime('NOW'))";
dbw.rawQuery(sql, new String[]{mitt,dest,text});

На данный момент единственным методом, который работает для вставки записи (с проблемой кавычек), является execSQL(String s).

Ответы [ 4 ]

18 голосов
/ 19 сентября 2011

SQLite не имеет собственного типа хранения данных даты и времени. Вместо этого он может хранить строку или целочисленное представление даты.

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

Ваша первоначальная попытка почти верна, но для вызова функции datetime () требуется аргумент 'NOW'.

String sql="INSERT INTO sms VALUES ( null, ?, ?, ?, datetime('NOW'))";

Также вы должны позвонить execSQL вместо rawQuery, который ожидает вернуть набор записей.

dbw.execSQL(sql, new String[]{str1,str2,str3});

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

String sql = "INSERT INTO sms(f1, f2, f3, f4)"
           + "VALUES ( null, ?, ?, ?, datetime('NOW'))";

Другой возможный вариант - с использованием временной метки по умолчанию в SQLite , хотя я не пытался сделать это в Android.

4 голосов
/ 20 сентября 2011

Я решил проблему следующим образом:

String sql="INSERT INTO sms VALUES (null,?,?,?,datetime('NOW'))";
dbw.execSQL(sql,new Object[]{mitt,dest,text});

Наконец-то я могу без проблем хранить каждый символ !!!

0 голосов
/ 19 сентября 2011
String sql="INSERT INTO sms VALUES ( null, '"+str1+"', '"+str2+"', '"+str3+"', datetime())";
dbw.rawQuery(sql, null);

Отметить одинарные кавычки.

0 голосов
/ 19 сентября 2011

Попробуй так:

ContentValues values;
values=new ContentValues();

// values.put("field_name",value);
values.put("id", 5); 
values.put("name", name);
dbw.insert("table_name", null, values);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...