|  | 
	                
 
 
  
    | 
        
        iOS - คือตอนนี้ผมกังลังงว่าผมจะอ้างอิงไปยัง SQLite ที่อยู่ใน Project ตัวเองได้ยังไง ใครมีโค้ดผมขอแนวๆๆหน่อยครับ     |  
    |  |  
 
	
		|  |  |  |  |  
		|  |  | 
          
            | คือโค้ด objective-c ของผมรู้สึกเหมือนว่าถ้ามันหาดาต้าเบสไม่เจอมันจะทำการสร้างให้ใหม่โดยอยู่ใน application แต่ผมสร้างดาต้าเบสขึ้นมาแล้ว และมันอยู่ใน project แล้ว คือคำถามผมจะอ้างอิงไปยังดาต้าเบสที่มันอยู่ในโปรของผมแล้วได้ยังไง เพราะทุกครังมันเหมือนว่ามันไม่ได้คอนเนคไปยังดาต้าเบสที่อยู่ในโปรเจคเลย มันไปอ้างอิงใน application ตลอดเลยอะครับ 
 
 Code (Objective-C)
 
 
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *docsDir;
    NSArray *dirPaths;
    // 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:
       @"contacts.db"]];    // ตรงนี้คือที่ผมงงว่าเราจะให้มันอิงไปยัง database ที่อยู่ในโปรเจคเรายังไง มันเหมือนอิงไปยัง application หรือ temp เพราะไม่เห็นมีอะไรบอกเลย
    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 CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";
            if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
            {
                 _status.text = @"Failed to create table";
            }
            sqlite3_close(_contactDB);
        } else {
                 _status.text = @"Failed to open/create database";
        }
     }
}
 
 
 Tag : Mobile, iOS, Mobile
 
 
 |  
            | 
 ประวัติการแก้ไข
 2013-12-02 11:42:20
 |  
            | 
              
                |  |  |  |  
                |  | 
                    
                      | Date :
                          2013-12-02 11:41:30 | By :
                          bank1324 | View :
                          1390 | Reply :
                          4 |  |  |  
                |  |  |  |  |  
            |  |  
		            |  |  
		|  |  |  |  |  
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ไม่รู้ว่าทำได้ไรือยังเห็นนานละไม่มีคนตอบเลย 
 ถ้ายังลองวิธีผมก็ได้นะครับ
 
 ตอนเปิดโปรแกรมมาให้เชคที่ document path ว่ามีไฟล์ sqlite ไรหรือยัง ถ้ายังก้อให้ copy file จาก bundle ไปไว้ซะ ถ้า รแล้วก็ไม่ต้องฝห้ทำอะไร
 การที่เปิด db ไม่ได้อาจเป็นเพราะว่ามันไม่พบไๆล์ก็ได้
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2013-12-12 23:33:15 | By :
                            j4kkapongz |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | คือตอนนี้ผมพอจะเข้าใจแล้วแต่ว่ามีอีก อย่างที่งงคือถ้าดูจากโค้ดผมมันจะอารมประมาณว่า ด้าต้าเบสที่อ่านมันอยู่ใน library > application >... 
 ก็คือ มันจะเช็คว่าใน application มีไหมถ้าไม่มี ก็ไปดึงในโปรเจคไปใส่ แต่ปัญหาคือ ผมต้องการให้มันอ่าน SQlite ในโปรเจคโดยตรงเลยได้ไหม เพราะผมไปนั่งดูแต่ละเว็บเหมือนมันก็อปปี้ไฟล์ไปไว้ใน library > application > ios smulator > xxxx-xxxx-xxxx-xxxx โดยมันจะคัดลอกไฟล์ Sqlite จาก buddle ก็คือตัวโปรเจค ไปไว้ที่ Application และค่อนเริ่มอ่านไฟล์ หรือว่าถ้าอ่าน Sqlite ในโปรเจคเลยเพราะมันมีไฟล์ Sqlite อยู่แล้วนิจะไปทำให้ซ้ำซ้อนทำไม หรือว่าอ่านที่ project โดยตรงปกติเขาไม่ทำกัน ต้องก็อปไปไว้ใน application ก่อนค่อยอ่าน ผมขอคำตอบหน่อยนะรอมาหลายวันแล้วนะครับ ขอบคุณครับ
 ใครช่วยอธิบายให้กระจ่างหน่อยนะ
 
 Code (Objective-C)
 
 
- (void) initDatabase
{
	BOOL success;
	NSFileManager *fileManager = [NSFileManager defaultManager];
	NSError *error;
	NSArray *paths = NSSearchPathForDirectoriesInDomains
          (NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentsDirectory = [paths objectAtIndex:0];
	NSString *writableDBPath = [documentsDirectory 
           stringByAppendingPathComponent:@"student.sqlite"];
	success = [fileManager fileExistsAtPath:writableDBPath];  // อ่านว่าใน application มีไฟล์หรือปล่าว
	if (success) 
	{
		return;
	}
       // ถ้าไม่มีก๊อปที่โปรเจค ไปไว้ ใน application นี่แหละคือตัวงง ว่าทำไมเราไม่อ่านไฟล์ Sqlite ที่โปรเจคเลย หรือปกติเขาไม่ทำกัน ไม่ต้องไปเช็คด้านบน ว่ามีไฟล์ ใน application ทำไมต้องไปเช็คให้มันซ้ำซ้อนทั้งๆที่เรามีไฟล์ sqlite ในโปรเจคอยู่แล้วก็อ่านในนี้เลย จะไปใช้คำสั่ง copy ทำไม ตัวอย่างส่วนมากก็เป็นแบบนี้เลยไม่เข้าใจ
	NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"student.sqlite"];
	success = [fileManager copyItemAtPath:defaultDBPath 
                    toPath:writableDBPath error:&error];
	if (!success) 
	{
	NSAssert1(0, @"Failed to create writable database file with message 
                  '%@'.", [error localizedDescription]);
	}
}
 |  
              | 
 ประวัติการแก้ไข
 2013-12-13 04:39:14
 2013-12-13 04:41:44
 2013-12-13 04:42:58
 2013-12-13 04:43:51
 2013-12-13 04:45:35
 2013-12-13 04:52:59
 2013-12-13 04:54:53
 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2013-12-13 04:38:18 | By :
                            bank1324 |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ผมเข้าใจแนวละเราสามารถดึง sqlite โดยสามารถอ่านไฟล์ Sqlite ในโปรเจค ได้โดยตรงดูตามคลิปนี้ 
 
 
 http://www.youtube.com/watch?v=SVMorX_2Ymk
 
 |  
              | 
 ประวัติการแก้ไข
 2013-12-13 18:01:59
 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2013-12-13 18:01:06 | By :
                            bank1324 |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              |  จัดไปครับ 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2013-12-14 08:44:29 | By :
                            mr.win |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |