1
sqliteを使用していて、sqliteデータベースにデータを挿入しようとしました。これは動作しません。私は名前がLabUpdateある一つのテーブルを持っていますが、私はこのようないくつかのエラーがあります。このようなSqlite目的関数cの挿入エラー
2012-04-02 08:49:58.158 SqliteDeneme[361:207] Failed from sqlite3_prepare_v2. Error is: no such column: deneme
2012-04-02 08:49:58.159 SqliteDeneme[361:207] Compiled Statement has error code:1:INSERT INTO LabUpdate (IsSuccess, ProducerId, Latitude, Longitude, Altitude, Slope, SampleDate, PackageNo, Status, Description) VALUES(1,1,0.100000,0.100000,0.100000,0.100000,deneme,1,1,deneme)
2012-04-02 08:49:58.160 SqliteDeneme[361:207] ExecuteNonQuery has error
2012-04-02 08:49:58.160 SqliteDeneme[361:207] Failed from sqlite3_step. Error is: library routine called out of sequence
マイコード:
- (IBAction)buttonClick:(id)sender {
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"SqliteTestDb.sqlite"];
BOOL success = [fileMgr fileExistsAtPath:dbPath];
if(!success)
{
NSLog(@"Cannot locate database file '%@'.", dbPath);
}
if(!(sqlite3_open([dbPath UTF8String], &cruddb) == SQLITE_OK))
{
NSLog(@"An error has occured.");
}
if(sqlite3_open([dbPath UTF8String], &cruddb) ==SQLITE_OK){
int str1 =1;
int str2 =1;
float str3 =0.1;
float str4 =0.1;
float str5 =0.1;
float str6 =0.1;
NSString *str7 [email protected]"deneme";
int str8 =1;
int str9 =1;
NSString *[email protected]"deneme";
NSString* SQL = [NSString stringWithFormat:@"INSERT INTO LabUpdate (IsSuccess, ProducerId, Latitude, Longitude, Altitude, Slope, SampleDate, PackageNo, Status, Description) VALUES(%i,%i,%f,%f,%f,%f,%@,%i,%i,%@)",str1,str2,str3,str4,str5,str6,str7,str8,str9,str10];
stmt = [self prepare:SQL];
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(cruddb);
if (sqlite3_step(stmt) != SQLITE_DONE)
{
NSLog(@"ExecuteNonQuery has error");
NSLog(@"Failed from sqlite3_step. Error is: %s", sqlite3_errmsg(cruddb));
}
else
{
int rowsaffected = sqlite3_changes(cruddb);
NSLog(@" rowsaffected %i",rowsaffected);
}
}
}
-(sqlite3_stmt*)prepare:(NSString*)query
{
sqlite3_stmt *queryHandle;
const char *sqlStatement = (const char *) [query UTF8String];
if(sqlite3_prepare_v2(cruddb, sqlStatement, -1, &queryHandle, NULL) != SQLITE_OK)
{
int error = sqlite3_prepare_v2(cruddb, sqlStatement, -1, &queryHandle, NULL);
NSLog(@"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(cruddb));
NSLog(@"Compiled Statement has error code:%i:%@",error,query);
}
return queryHandle;
}
問題は何ですか?これをどうすれば解決できますか?お返事をありがとうございます。
本当にあなたの質問に答えるわけではありませんが、FMDBやPLDatabaseのようなObjective-C sqliteラッパーを使用することをお勧めします。 –
あなたはNSLog(@ "SQL:%@"、SQL)を投稿できますか?しかし、あなたは文字列をマークする必要があります!例えば(%i、%i、%f、%f、%、%f、%f、%、NS) str1、str2、str3、str4、str5、str6、str7、str8、str9、str10]のいずれかである。 – CarlJ
何らかの理由で 'sqlite3_prepare_v2()'を実行していて、それが失敗した場合はエラーコードを取得するために再度実行します**。それはナンセンスです。 1つのステップでそれをしなさい。 – trojanfoe