Napisałem schemat bazy danych (do tej pory tylko jedną tabelę) oraz instrukcje INSERT dla tej tabeli w jednym pliku. Następnie utworzyłem bazę danych w następujący sposób:
$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error
Linia 16 mojego pliku wygląda mniej więcej tak:
INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');
Problemem jest znak ucieczki dla pojedynczego cudzysłowu. Próbowałem też podwójnie unikać pojedynczego cudzysłowu (używając \\\'
zamiast \'
), ale to też nie działało. Co ja robię źle?
INSERT INTO table_name (field1, field2) VALUES (?, ?)
i wartości byłyby dostarczane bezpośrednio (i bez podstawień).Myślę, że chciałbyś uciec, podwajając pojedynczy cytat:
źródło
aby zamienić wszystkie (') w ciągu, użyj
przykład:
źródło
Na wszelki wypadek, jeśli masz pętlę lub ciąg json, który należy wstawić do bazy danych. Spróbuj zamienić ciąg na pojedynczy cudzysłów. oto moje rozwiązanie. na przykład, jeśli masz ciąg zawierający pojedynczy cudzysłów.
to działa dla mnie w C # i Javie
źródło
W języku C # można użyć następujących poleceń, aby zamienić pojedynczy cytat na podwójny cudzysłów:
Wynik będzie następujący:
A jeśli pracujesz bezpośrednio z Sqlite; możesz pracować z obiektem zamiast ze stringiem i łapać specjalne rzeczy, takie jak DBNull:
źródło
W skryptach basha stwierdziłem, że unikanie podwójnych cudzysłowów wokół wartości było konieczne w przypadku wartości, które mogą być zerowe lub zawierać znaki wymagające znaku ucieczki (np. Myślniki).
W tym przykładzie wartość kolumny A może mieć wartość null lub zawierać łączniki .:
źródło