NSMutableString
をsqliteに挿入できませんでした。 Webサーバーから情報を取得して正常にsqliteファイルを作成しましたが、Webからsqliteにデータを挿入できませんでした。Objective-Cでsqliteに文字列を挿入するにはどうすればよいですか?
ここに問題があると思います。
NSString *insertSQL = @"INSERT INTO Questions VALUES (result)";
しかし、私はこの問題を解決できませんでした。誰でも私を助けてくれますか?
- (void)getInforamtionFromWeb {
NSURL *url = [NSURL URLWithString:kGetUrl];
data = [NSData dataWithContentsOfURL:url];
NSError *error;
json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
result = [[NSMutableString alloc] init];
for (NSObject * obj in json)
{
[result appendString:[obj description]];
}
}
-(void)initiatSqlite{
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
// Build the path to the database file
_databasePath = [[NSString alloc]
initWithString: [docsDir stringByAppendingPathComponent:
@"Questions.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: _databasePath ] == NO)
{
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
char *errMsg;
const char *sql_stmt =
"CREATE TABLE IF NOT EXISTS Questions (ID INTEGER PRIMARY KEY AUTOINCREMENT, Question Text, AnswerA Text, AnswerB Text, AnswerC Text, AnswerD Text, CorrectAnswer Text, Explanation Text)";
if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
{
[self Worningtitle:@"Error" Message:@"Failed to create table"];
}
sqlite3_close(_contactDB);
} else {
[self Worningtitle:@"Error" Message:@"Failed to open/create database"];
}
}
}
- (void) insertData
{
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
NSString *insertSQL = @"INSERT INTO Questions VALUES (result)";
const char *insert_stmt = [insertSQL UTF8String];
NSLog(@"%s",insert_stmt);
sqlite3_prepare_v2(_contactDB, insert_stmt, -1, &statement, NULL);
sqlite3_bind_text(statement, 1, [result UTF8String], -1, SQLITE_TRANSIENT);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"Product added");
} else {
NSLog(@"Failed to add Product");
}
sqlite3_finalize(statement);
sqlite3_close(_contactDB);
}
}
大変ありがとうございます。文字列は、以下よりもはるかに多く、次にこれをsqliteに挿入しますか? { AnswerA =まだ、 AnswerB = Gh; AnswerC = Gf; AnswerD = Gh; CorrectAnswer = D; 説明= "説明:まだ"; ID = 35; 質問= Ty; } 2016-04-30 00:22:27929 Pharm Tech [9960:824218] { AnswerA =まだ、 AnswerB = Gh; AnswerC = Gf; AnswerD = Gh; CorrectAnswer = D; 説明= "説明:まだ"; ID = 35; 質問= Ty; } { AnswerA = Gf; AnswerB = Gh; Answer –
各列に対して、INSERT文の最初の括弧セットに列名を追加し、2番目の括弧セットに '?'を追加し、データ型に対応する 'sqlite3_bind_xxx'を呼び出します。 – rmaddy
私はこれをしました。次は、私はたくさん試しました。手伝ってくれませんか? NSString * insertSQL * @ "INSERT INTOの質問(AnswerA、AnswerB、AnswerC、AnswerD、CorrectAnswer、ID、質問)VALUES(?)"; ' 'const char * insert_stmt = [insertSQL UTF8String];' ' NSLog (ステートメント、1、[結果UTF8String]、-1、SQLITE_TRANSIENT); ' –