|
|
|
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 :
1255 |
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|