데이터베이스에 연결하려고하는데 경로를 NSBundle로 이동하면 성공적이지만 경로를 내 응용 프로그램의 문서 디렉토리에 넣으려고하면 성공하는 것으로 나타납니다. 그런 다음왜 NSBundle mainBundle이 작동하지만 documentsDirectory는 작동하지 않습니까?
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths lastObject];
NSString* databasePath = [documentsDirectory stringByAppendingPathComponent:@"tblStore.sqlite"];
:
NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];
이 줄을 주석되지 않으며, 위의 라인이 주석 처리되어 : 나는 선에서 주석
-(IBAction)setInput:(id)sender
{
NSString *strStoreNumber;
NSString *strRegNumber;
strStoreNumber = StoreNumber.text;
strRegNumber = RegNumber.text;
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths lastObject];
NSString* databasePath = [documentsDirectory stringByAppendingPathComponent:@"tblStore.sqlite"];
// NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSLog(@"Opened sqlite database at %@", databasePath);
sqlite3_exec(database, "CREATE TABLE IF NOT EXISTS tblStore (ID INTEGER PRIMARY KEY AUTOINCREMENT, Message TEXT)", NULL, NULL, NULL);
//...stuff
}
else
{
NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database));
sqlite3_close (database);
}
//
NSString *querystring;
// create your statement
querystring = [NSString stringWithFormat:@"SELECT strStore, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber];
const char *sql = [querystring UTF8String];
NSString *szStore = nil;
NSString *szReg = nil;
sqlite3_stmt *statement = nil;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement
{
NSLog(@"sql problem occured with: %s", sql);
NSLog(@"%s", sqlite3_errmsg(database));
}
else
{
// you could handle multiple rows here
while (sqlite3_step(statement) == SQLITE_ROW)
{
szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)];
szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)];
}
}
sqlite3_finalize(statement);
lblStoreNumber.text = szStore;
lblRegNumber.text = szReg;
//
}
: 여기 내 코드입니다 그것은 잘 작동합니다. setInput에 방법에서와 같이 그 세 라인 (주석 처리되지 않은 경우, 나는 다음과 같은 오류를 얻을 :
2012-05-07 13:44:29.511 CCoDBTry[1981:f803] Opened sqlite database at /Users/Matt****/Library/Application Support/iPhone Simulator/5.1/Applications/5DB7A218-A0F6- 485F-B366-91FD2F9BC062/Documents/tblStore.sqlite
2012-05-07 13:44:29.545 CCoDBTry[1981:f803] sql problem occured with: SELECT strStore, strReg FROM tblStore WHERE strStore = 8053 AND strReg = 4;
2012-05-07 13:44:29.546 CCoDBTry[1981:f803] no such column: strStore
이 명심,이 같은 데이터베이스 테이블에 액세스하고 나는를 사용할 때 잘 작동 NSBundle 논리. 내가 크게 여기에 대한 도움을 주셔서 감사합니다. 나는 완전히 NSBundle 및 documentsDirectory의 차이를 이해하지 인정,하지만 난 내 표는 내 응용 프로그램의 문서에 존재 할 것이라고 생각합니다.
감사합니다!
을 NSDocumentDirectory TO 왜합니까 strStore 열을 찾을 때 나는 DocumentsDirectory 작업에서 생성되지 경로? 열은 NSBundle 논리가 사용될 때 발견됩니다. 내 코드에 어떤 문제가 있는지 자세히 설명해 주시겠습니까? 목표는 iPhone의 문서 폴더에 내 sqlite 테이블의 경로를 만드는 것입니다. 나는 도청 당했고 여기에서 어떤 도움을 주시면 감사하겠습니다. 감사! – Skizz