Сохранение веб-просмотра geturl и getitle в базе данных Sqlite.Проблема с синтаксической ошибкой апостроф ' - PullRequest
0 голосов
/ 09 февраля 2019

Когда я сохраняю webview.getTitle ();в базе данных Sqlite, если в заголовке есть апостроф ('), то я получил ошибку -

android.database.sqlite.SQLiteException: вблизи "at": синтаксическая ошибка (код 1): при компиляции: INSERT INTO Favourite VALUES ('4 madhab bid'at tavassul', 'file: ///android_asset/web/akaid/4maddhab/4.htm');

Мой код такой

mysql objcon = new mysql(this, null, null, 1);
SQLiteDatabase db = objcon.getReadableDatabase();
db.execSQL(
    "INSERT INTO Favorite VALUES('"
     + txtnombre.getText()
     + "', '"
     + txtlink2.getText()
     +"' );"
);

Как решить эту проблему?

1 Ответ

0 голосов
/ 09 февраля 2019

В txtnombre.getText(): '4 madhab bid'at tavassul' есть одна цитата.Это приводит к тому, что SQLite ошибочно считает, что эта кавычка обозначает конец первого значения для вставки.

Чтобы избежать этого, вы можете вручную удвоить одинарные кавычки:

db.execSQL(
    "INSERT INTO Favorite VALUES('"
    + txtnombre.getText().replaceAll("'","\''")
    + "', '"
    + txtlink2.getText().replaceAll("'","\''")
    +"' );"
);

Я бы порекомендовалиспользуя параметры привязки.С помощью этой опции ваш драйвер базы данных обрабатывает выход из-за пределов:

q = "INSERT INTO Favorite VALUES(?, ?)";
t1 = txtnombre.getText();
t2 = txtlink2.getText();
db.rawQuery(q, new String[] { t1, t2 });

Наконец, другой подход в Android будет состоять в том, чтобы использовать собственный метод sqlEscapeString(), который в первую очередь создан для этого.цель.

Кроме того, как прокомментировал pskink, использование insert () будет лучше соответствовать вашему варианту использования, чем необработанный SQL.

...