2010-12-08 9 views
-3

私はiPhone SDKのSQLiteデータベースに値を保存しようとしています。 iはSQlite - iPhone sdk - アサーション失敗

 
[database executeNonQuery:strQuery1]; 

このラインを実行すると このメッセージは、コンソール上に印刷されています。

SQLiteのステップは失敗しました:制約は、私はプロジェクト今夜を提出しなければならないとして、私は緊急のもとに助けが必要

に失敗しました。私は2日以来試みており、それは私をナッツを運転しています。

Heres briefヘッダーファイルの情報 この行を使用してView Controllerヘッダーに宣言しました。

 
Sqlite *database; 

And heres the header of SQlite

 
@interface Sqlite : NSObject 
{ 
    NSInteger busyRetryTimeout; 
    NSString *filePath; 
    sqlite3 *_db; 
} 

@property (readwrite) NSInteger busyRetryTimeout; 
@property (readonly) NSString *filePath; 
+ (NSString *)createUuid; 
+ (NSString *)version; 
- (id)initWithFile:(NSString *)filePath; 
- (BOOL)open:(NSString *)filePath; 
- (void)close; 
- (NSInteger)errorCode; 
- (NSString *)errorMessage; 
- (NSArray *)executeQuery:(NSString *)sql, ...; 
- (NSArray *)executeQuery:(NSString *)sql arguments:(NSArray *)args; 
- (BOOL)executeNonQuery:(NSString *)sql, ...; 
- (BOOL)executeNonQuery:(NSString *)sql arguments:(NSArray *)args; 
- (BOOL)commit; 
- (BOOL)rollback; 
- (BOOL)beginTransaction; 
- (BOOL)beginDeferredTransaction; 

+0

実行しているクエリは何ですか? NSLog(@ Query:%@ "、strQuery1);とその最初の行の直前または直後に出力し、ここで出力を共有してください。 – mvds

+0

@mvds私はSQLite Managerでそれをチェックし、それは完全に実行されています。 –

+0

A.お手伝いしますか?そうでない場合は、離れる。そうでなければ、ここで完全な問題を共有してください。 sqliteからエラーが発生している間に、sqliteヘッダーを共有しているということは、少なくとも、どの情報が問題を診断するのに役立つかを判断する人ではないことを示しています。 – mvds

答えて

1

If only there was some sort of on line resource where you could go and enter "constraint failed" in a search box to get the answer.

Since that is sadly not the case, I'll tell you. The problem is most likely that you are violating a key constraint with your query. It's hard to say without seeing the query and the database schema, but you might be, for instance, trying to insert a row with a duplicate primary key or insert a row with a foreign key that does not exist in the referenced table.

+0

ありがとう、あまりにも、コードの残りの部分をすべて確認した後、私は問題がクエリであることを疑う。奇妙なことは、私はコンソールにクエリを印刷し、SQLiteマネージャでそれを実行し、それは完全に動作します。 –

0

Executing it in the SQLliteManager won't help you, it's a bit different on the iPhone. You should be able to get an error from the Database using the errorMessage property. And yes, also give us the query itself.

0

First of all, just share the query. You're starting to piss people off.

Second of all, are you sure the mystery query isn't an INSERTクエリは、実行されていないと確信しています2回ミステリーコードでは?

これは、手動でクエリを実行するとエラーが表示されないことを示しています。

+0

問題は解決しました。傲慢に感謝します。 –

+0

@ T.A。どういたしまして。壮大なソリューションをお寄せいただきありがとうございます。 – mvds

+0

解決策はJeremyPの説明と同じでした。私は行を追加していましたが、その前に行が重複していました。私はスキーマを設計し、そこからUNIQUE制約を削除しました。 –