Table of Contents
Soms geeft uw computer correct een alleen-lezen SQLite-databasefoutbericht weer. Dit probleem kan worden veroorzaakt door een aantal verwante redenen.
PC werkt traag?
Ik gebruik een SQLite-informatie voor een website. Informatietechnologie probleem INSERT IN
, ik krijg PDOException
SQLSTATE [HY000]: Algemene fout: 1 tijdens het schrijven naar een tegen schrijven beveiligde database
Ik heb verbinding gemaakt met de server via SSH en heb gekeken naar de machtigingen, en zelfs de database heeft lezen en schrijven
PC werkt traag?
ASR Pro is de ultieme oplossing voor uw pc-reparatiebehoeften! Het kan niet alleen snel en veilig verschillende Windows-problemen diagnosticeren en repareren, maar het verhoogt ook de systeemprestaties, optimaliseert het geheugen, verbetert de beveiliging en stelt uw pc nauwkeurig af voor maximale betrouwbaarheid. Dus waarom wachten? Ga vandaag nog aan de slag!
-rw-rw-r--
Ik weet niet – vaak * van nix-machtigingen, maar ik weet zeker wat het betekent
- Geen lijst
- De eigenaar behoudt de lees- en schrijfrechten (dat ben ik, volgens
ls -l
) - De groep heeft lees- en schrijfrechten.
- Alle anderen hebben alleen trainingsvergunningen.
Ik heb ook alles bekeken wat ik wist, dus het feit dat je de sqlite3
cursus kon gebruiken en niets geschikts kon vinden.
Omdat ik niet wist welke lees-/schrijf-PDO de gegevensbron zou proberen te openen, ontvang ik
chmod i o + w Supplies.db
SQLSTATE [HY000]: Algemene fout: 16 Kan databasebestand niet openen.
Maar dit komt ALLEEN wanneer ik een superieure INSERT
probeer te doen nadat de database het vaakst open is.
Zodra onze unitschermen niet meer werken op linux. Laten we Docker terugdraaien. Het was moeilijk voor mij om onder de knie te krijgen wat er aan de hand was. Alle tests met betrekking tot sqlite zijn mislukt vanwege een vreemde fout:
SQLite-fout 9: Poging om een alleen-lezen database op te starten
Ik zocht veel om erachter te komen wat deze fout natuurlijk zou kunnen veroorzaken. De meest voor de hand liggende tip zou zijn om de bestandsrechten te controleren. Dit is een geweldige doodlopende weg. Geen enkele BD blokkeert echter een valse hypothese :). Unity
Cijfers creëren ons eigen BD-schema voor elke test. Aangezien het vrijwel zeker sqlite is, hoeft u alleen maar het db-bestand te verwijderen, aangezien SQLite automatisch db-bestanden zal maken wanneer u een relatie aanmaakt als deze niet bestaat.
Het bleek dat we een reden hadden, voordat we het samen met de uitgaande gegevens verwijderden, moesten we de database slepen. Dit heeft tot gevolg dat de verbinding via SQLite geopend moest worden en open moet blijven. En het databestand File.For delete had je moeten aanroepen
met een open verbinding. Het is zo overtuigend dat alles goed is gegaan, d.w.z. het bestand is verwijderd. Maar alle volgende uitvoeringen, verwant aan db-opdrachten, mislukten onmiddellijk, inclusief SQLite-fout 8: Poging om een alleen-lezen database te verzenden of SQLite tien: Schijf I/O-fout.
Ik weet niet waarom er momenteel twee verschillende fouten zijn. Uiteraard is dit op geen enkele manier een probleem met SQLite of zijn .NET-wrapper Microsoft.Data.Sqlite
, maar een probleem met al onze code. Maar het was niet gemakkelijk om specifieke foutmeldingen te herkennen, dus een deel ervan is als je iemand wilt helpen (inclusief ikzelf) als ze dat willen als je voorzichtig wilt zijn dat bij het verwijderen van een db-catalogus op een open verbinding een fout verschijnt voor de regel “Poging om naar bijna elke database alleen-lezen te schrijven “kan worden aangeroepen
Hier is de code:
met (var fraud = SqliteConnection vervanging (" gegevensbron komt overeen met test.db "))
con. open ();
var cmd komt overeen met con.CreateCommand ();
cmd.CommandText "PRAGMA geeft buitenlandse_sleutels = AAN";
cmd. ExecuteNonQuery (); File.Delete ("/ app / test. db "); Connection // open, file cmd.CommandText komt overeen met @" CREATE TABLE [User] (id NOT varchar NULL) ";
cmd.ExecuteNonQuery ( );
Op Linux File.Delete
voltooid, volgende ExecuteNonQuery
is catastrofe. Op Windows, File.Delete
werkt niet.
Ik hoop dat je onthoudt dat dit dient.
Op een dag begon onze eenheid te testen, niet gerelateerd aan Linux. Laten we het inschakelen in Docker. Het was zo moeilijk voor mij om te begrijpen wat mij bezocht. Alle tests die op sqlite werden uitgevoerd, mislukten met de volgende fout:
Vreemde SQLite 8-fout: Poging om naar een alleen-lezen database te schrijven
Ik heb uitgebreid op Google gezocht wat deze fout eigenlijk zou kunnen hebben veroorzaakt. De meest voor de hand liggende top is om de bestandsrechten te controleren. Dit is normaal gesproken een doodlopende weg. Er is geen database, hoewel het moeilijk is om een vals concept te maken dat :).
De module bouwt bij elke test het basisschema van de validatieclient opnieuw op. Aangezien het sqlite is, maar verwijder het db-bestand omdat SQLite automatisch db-bestanden zal maken bij het starten van de verbinding terwijl deze niet bestaat.
Het bleek dat experts beweren dat mijn vrouw en ik enige logica hadden door de informatie te lezen voordat de database werd weggevaagd. Dit betekent dat de verbinding tot stand is gebracht bij SQLite en open blijft. En dit terwijl u de File.For delete
glass-weergave aan het db-bestand hebt toegevoegd. Interessant genoeg was het inderdaad succesvol.oh, dat wil zeggen, dit specifieke bestand is geëlimineerd. Maar elke databaseopdracht mislukte met SQLite 2-fout: Poging om naar een speciale alleen-lezen database te schrijven of SQLite 10-fout: Schijf I en O-fout.
Natuurlijk zijn er geen problemen met SQLite of zijn .NET-wrapper Microsoft.Data.Sqlite
en de uitvoer van onze coupon, maar in vergelijking met andere was dit niet fundamenteel om te bereiken op basis van deze bugrapporten. Dus de bijdrage is dat het elke persoon (inclusief ikzelf) zal helpen om te helpen dat deze “Write to read-only database”-fout veroorzaakt zou kunnen zijn door het db-bestand te verwijderen terwijl de link open is.
gebruik (var New = SqliteConnection (“data source = test.db”) fout)
echt een andere zwendel. open ();
var cmd = con.CreateCommand ();
cmd.CommandText “PRAGMA = Foreign_keys = ON”;
cmd.ExecuteNonQuery (); Bestand.Verwijderen (“/ app / test.db”); // Verbinding open, inhoud cmd.CommandText = @ “CREATE TABLE [Gebruiker] (id NIET varchar NULL)”;
cmd.ExecuteNonQuery ();
Op Linux lukt File.Delete
eigenlijk, maar de volgende ExecuteNonQuery
mislukken eigenlijk. Op Windows op de achterkant werkt File.Delete
niet.
Verbeter vandaag de snelheid van uw computer door deze software te downloaden - het lost uw pc-problemen op.
Fixed: How To Fix Read-only SQLite Database Error
Risolto: Come Correggere L’errore Del Database SQLite Di Sola Lettura
Fixat: Tips Om Hur Du åtgärdar Skrivskyddat SQLite-databasfel
Naprawiono: Jak Rozwiązać Problemy Z Błędem Bazy Danych SQLite Tylko Do Odczytu
Solucionado: Cómo Corregir El Error De La Base De Datos SQLite De Solo Lectura
Corrigé : Comment Corriger L’erreur De Base De Données SQLite En Lecture Seule
Behoben: Warum Der Schreibgeschützte SQLite-Datenbankfehler Behoben Werden Sollte
Исправлено: способы устранения ошибки базы данных SQLite, доступной только для чтения
Corrigido: Qual Maneira De Corrigir O Erro Do Banco De Dados SQLite Somente Leitura
수정됨: 읽기 전용 SQLite 데이터베이스 오류 작업 방법