2012-10-30 13 views
6

मैं अपने वेब-एप के साथ एक पूर्व आबादी वाले डेटाबेस का उपयोग करना चाहता हूं, ताकि मेरा ऐप ऑफलाइन काम करे। मैं इसे फोनगैप/कॉर्डोवा (2.0) के नवीनतम संस्करण के साथ कैसे कर सकता हूं?फ़ोनगैप/कॉर्डोवा 2.0 के साथ प्रीपोप्लेटेड SQLite डेटाबेस का उपयोग कैसे करें?

मुझे पता है कि इस सवाल का पहले कहा गया है, लेकिन सभी जवाब कॉर्डोबा के वर्तमान संस्करण और iOS

https://github.com/atkinson/phonegap-prepopulate-db दो साल https://github.com/davibe/Phonegap-SQLitePlugin के लिए अद्यतन नहीं किया गया अद्यतन नहीं किया गया करने के लिए की तारीख रिश्तेदार बाहर होने लगते हैं 7 महीने के लिए और 1.7

मुझे यहां एक पोस्ट मिली: http://www.raymondcamden.com/index.cfm/2012/7/27/Guest-Blog-Post-Shipping-a-populated-SQLite-DB-with-PhoneGap क्या यह एकमात्र तरीका है?

इसके अलावा, मैं नोट करना चाहिए कि मैं iOS6 के साथ कॉर्डोबा 2.7 के लिए निम्न प्लग इन IOS 6

+0

कॉर्डोवा के नए संस्करण के लिए मेरा जवाब देखें: http://stackoverflow.com/questions/34673365/working-with-prepopulated-sqlite-database-in-phonegap-android/37857340#37857340 – Balflear

उत्तर

2

मैं का इस्तेमाल किया है का उपयोग करें और मैं देख रहा हूँ कि यह सिर्फ एक दिन पहले अपडेट किया गया। https://github.com/pgsqlite/PG-SQLitePlugin-iOS

उनके यहां एक एंड्रॉइड संस्करण भी है। समस्या का एक हिस्सा है फोनगैप परिवर्तन अक्सर प्लगइन्स को अद्यतित रखने में समय लग सकता है ताकि वे समाप्त हो जाएं। AppDelegate.m में इनिट विधि के लिए कोड यहां दिया गया है I

ध्यान रखें कि आपको कभी-कभी आईओएस सिम्युलेटर को मिटा देना होगा ताकि यह एप्लिकेशन से संबंधित फाइलों को फिर से लोड कर सके।

- (id)init{ 

NSHTTPCookieStorage* cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

int cacheSizeMemory = 8 * 1024 * 1024; // 8MB 
int cacheSizeDisk = 32 * 1024 * 1024; // 32MB 

अगर __has_feature (objc_arc)

NSURLCache* sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; 
बाकी

NSURLCache* sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease]; 

endif

[NSURLCache setSharedURLCache:sharedCache]; 
databaseName = @"SomeCoolDatabase.db"; 

NSLog(@"databaseName: %@", databaseName); 

databasePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0]; 
NSLog(@"databasePath: %@", databasePath); 

databaseFile = [databasePath stringByAppendingPathComponent:databaseName]; 
NSLog(@"databaseFile: %@", databaseFile); 
// Execute the "checkAndCreateDatabase" function 
[self checkAndCreateDatabase]; 

self = [super init]; 
return self; 

}

- (शून्य) checkAndCreateDatabase {

// Check if the SQL database has already been saved to the users phone, if not then copy it over 
BOOL success; 
// Create a FileManager object, we will use this to check the status 
// of the database and to copy it over if required 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
// Check if the database has already been created in the users filesystem 
success = [fileManager fileExistsAtPath:databaseFile]; 
// If the database already exists then return without doing anything 
if(success){ 
    NSLog(@"Database Present"); 
    return; 
} else { 
    NSLog(@"database not present"); 
} 
// If not then proceed to copy the database from the application to the users filesystem 
// Get the path to the database in the application package 
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 

// Create the database folder structure 
[fileManager createDirectoryAtPath:databasePath withIntermediateDirectories:YES attributes:nil error:NULL]; 
// Copy the database from the package to the users filesystem 
[fileManager copyItemAtPath:databasePathFromApp toPath:databaseFile error:nil]; 
[fileManager release]; 

}

आशा इस मदद करता है ...

0

धन्यवाद! मैं यहां शुरू किए बिना ऐसा करने में सक्षम नहीं होता!

उसने कहा, यह मेरे लिए बॉक्स से बाहर काम नहीं कर रहा था, इसलिए मैंने इसे अपडेट किया, और मैं आईओएस के लिए मूल कोड के साथ 'अच्छा' नहीं हूं, इसलिए मैं बहुत सुझावों के लिए खुला हूं ।

मैंने ऐपडिलेगेट.एम फ़ाइल में सुझाए गए कोड को जोड़ा, त्रुटियों का ढेर मिला। तो, मैं ऐपडिलेगेट में चले गए।ज फ़ाइल:

@interface AppDelegate : NSObject <UIApplicationDelegate>{} --Looks like this to start. 

यह इस तरह बनाएं:

@interface AppDelegate : NSObject <UIApplicationDelegate>{ 
    NSString* databaseName; 
    NSString* databasePath; 
    NSString* databaseFile; 
} 

मैं बस वहाँ में चर घोषित करने के लिए किया था।

[fileManager release]; 

As, according to this answer, my project seemingly automatically releases? I hope?

अब मैं इसे खोजने के लिए xcode के लिए सही स्थान में डीबी फ़ाइल हो रही पर काम करना होगा: मैं भी इस लाइन को हटा दिया।

आशा है कि इससे मदद मिलती है!

0

हालांकि यह सवाल पुराना है ... सोचा कि यह किसी को मेरी समाधान पोस्ट करने में मदद कर सकता है - 2017 में मिला। (चूंकि फोनगैप बदल गया है, पुराने समाधान अब एंड्रॉइड और ऐप्पल ऐप बाजारों पर काम नहीं करेंगे या स्वीकार किए जाएंगे।) मैंने इस समस्या पर लंबे समय तक काम किया - मुद्दा यह है कि आप एक पूर्व-जनसंख्या वाले डेटाबेस को आयात करना चाहते हैं - जिसके लिए बहुत आसान समाधान नहीं हैं। मुझे सबसे अच्छा और आसान पाया गया - और वर्तमान में केवल लाइटहेल्पर कॉर्डोवा-एसक्यूएलआईटी-एक्सटी (https://github.com/litehelpers/cordova-sqlite-ext)

मैंने इसे अपने ऐप में जोड़ा है और यह अच्छी तरह से काम कर रहा है। मुझे फोनगैप से दूर स्विच करना पड़ा - और कॉर्डोवा का उपयोग करें - लेकिन यह मेरे लिए काम कर रहा है।