Note that there are some explanatory texts on larger screens.

plurals
  1. POSQLITE3 Constraint Failed
    primarykey
    data
    text
    <p>My first question on stackoverflow and I really hope you guys can help me.</p> <p>I've been trying to get prepared statements running in objective C and so far so good. But now I keep getting "Constraint failed" on my database when trying to add a track.</p> <p>I've already deleted the db and created it again but the error remains. Also I have been looking into the duplicate key but I don't see me adding a duplicate anywhere. The locations table adds just fine and it's built kind of the same.</p> <p>My DB:</p> <pre><code>CREATE TABLE locations (LocationID INTEGER PRIMARY KEY AUTOINCREMENT, TimestampGPS DATE NOT NULL, Longitude REAL NOT NULL, Latitude REAL NOT NULL, Altitude REAL NOT NULL, Accuracy REAL NOT NULL, Bearing REAL NOT NULL, Speed REAL NOT NULL, TimestampDevice DATE NOT NULL); CREATE TABLE tracks (TrackID INTEGER PRIMARY KEY AUTOINCREMENT, Title VARCHAR, Description VARCHAR, StartTrackDeviceTime DATE NOT NULL, EndTrackDeviceTime DATE NOT NULL); CREATE TABLE track_locations (TrackID INTEGER NOT NULL REFERENCES tracks(TrackID), LocationID INTEGER NOT NULL REFERENCES locations(LocationID), PRIMARY KEY (TrackID, LocationID)); </code></pre> <p>My code to add a track. (I have got code to add a location which is similar and that one works just fine)</p> <pre class="lang-c prettyprint-override"><code>const char *sqlTrack = "INSERT INTO tracks(Title, Description, StartTrackDeviceTime, EndTrackDeviceTime) VALUES(?, ?, ?, ?)"; if(sqlite3_prepare_v2(db.dataBase, sqlTrack, -1, &amp;addTrackStatement, NULL) != SQLITE_OK) { NSLog(@"Error: %s", sqlite3_errmsg(db.dataBase)); } sqlite3_bind_text(addTrackStatement, 1, [track.title UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(addTrackStatement, 2, [track.description UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(addLocationStatement, 3, [[dateFormatter stringFromDate:track.startTime] UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(addTrackStatement, 4, [[dateFormatter stringFromDate:track.endTime] UTF8String], -1, SQLITE_TRANSIENT); NSLog(@"Going to execute the statement"); if(SQLITE_DONE != sqlite3_step(addTrackStatement)) { NSLog(@"First step failed"); NSLog(@"Error: %s", sqlite3_errmsg(db.dataBase)); return NO; } else { long insertedTrack = sqlite3_last_insert_rowid(db.dataBase); NSLog(@"Inserted id on TRACK: %ld", insertedTrack); //HERE I ALSO ADD LOCATIONS sqlite3_clear_bindings(addTrackStatement); sqlite3_reset(addTrackStatement); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload