2008-08-05 15 views
7

मेरे पास 2 SQLite डेटाबेस हैं, जो सर्वर से डाउनलोड किए गए हैं (server.db), और क्लाइंट (client.db) पर संग्रहीत के रूप में उपयोग किया जाता है। सर्वर डेटाबेस से डेटा का उपयोग कर, मुझे क्लाइंट डेटाबेस पर विभिन्न सिंक क्वेरी करने की आवश्यकता है।एक साथ कई SQLite डेटाबेस का उपयोग

उदाहरण के लिए, मैं client.db tRole तालिका में सभी पंक्तियों को हटाना चाहता हूं, और server.db tRole तालिका में सभी पंक्तियों के साथ दोबारा तैयार करना चाहता हूं।

एक और उदाहरण, मैं client.db tFile तालिका में सभी पंक्तियां हटाना चाहता हूं जहां fileIDserver.db tFile तालिका में नहीं है।

SQL सर्वर में आप डेटाबेस के नाम से तालिका को उपसर्ग कर सकते हैं। क्या एडोब एयर का उपयोग कर SQLite में ऐसा करने के लिए वैसे भी है?

+0

ऐसा कैसे? SQLite में एक 'संलग्न' कीवर्ड है जो आपको एक और डेटाबेस संलग्न करने की अनुमति देता है। और थियो का जवाब दिखाता है कि वायु में एक संबंधित एपीआई कॉल प्रतीत होता है। क्या आप कुछ भेदभाव कर रहे हैं जब आप विशेष रूप से "डेटाबेस स्तर से" कहते हैं? – spaaarky21

उत्तर

7

मैं सिर्फ आकाशवाणी एसक्यूएल एपीआई को देखा है, और वहाँ SQLConnection पर एक attach विधि यह वास्तव में आप क्या जरूरत है लग रहा है।

मैं इस परीक्षण नहीं किया है, लेकिन दस्तावेज़ के अनुसार यह काम करना चाहिए:

var connection : SQLConnection = new SQLConnection(); 

connection.open(firstDbFile); 
connection.attach(secondDbFile, "otherDb"); 

var statement : SQLStatement = new SQLStatement(); 

statement.connection = connection; 
statement.text = "INSERT INTO main.myTable SELECT * FROM otherDb.myTable"; 
statement.execute(); 

उस कोड snipplet में त्रुटियों हो सकता है, मैं हाल ही में आकाशवाणी एसक्यूएल एपीआई के साथ ज्यादा काम नहीं किया। ध्यान दें कि open के साथ खोले गए डेटाबेस की तालिका main.tableName का उपयोग कर उपलब्ध है, किसी भी संलग्न डेटाबेस को उपरोक्त उदाहरण में सभी नाम (otherDb) दिया जा सकता है।

1

स्क्लाइट में एक साथ कई डेटाबेस खोलना संभव है, लेकिन फ्लेक्स/एआईआर से काम करते समय यह संदिग्ध हो सकता है। कमांड लाइन क्लाइंट में आप ATTACH DATABASE path/to/other.db AS otherDb चलाते हैं और फिर आप उस डेटाबेस में टेबल को otherDb.tableName जैसे MySQL या SQL सर्वर में संदर्भित कर सकते हैं।

संलग्न डेटाबेस में टेबल्स को वाक्यविन्यास डेटाबेस-नाम.table-name का उपयोग करने के लिए संदर्भित किया जा सकता है।

ATTACH DATABASE documentation at sqlite.org

0

इस कोड काम हो सकता है, यह मेरे से लिखने है: "। वहाँ डेटाबेस स्तर से यह करने के लिए तरीका नहीं है"

package lib.tools 

import flash.utils.ByteArray; 
import flash.data.SQLConnection; 
import flash.data.SQLStatement; 
import flash.data.SQLResult; 
import flash.data.SQLMode; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
import flash.filesystem.File; 
import mx.core.UIComponent; 
import flash.data.SQLConnection; 

public class getConn { 
    public var Conn:SQLConnection; 

    public function getConn(database:Array) {  
     Conn = new SQLConnection(); 
     var Key:ByteArray = new ByteArray(); 
     Key.writeUTFBytes("Some16ByteString"); 
     Conn.addEventListener(SQLErrorEvent.ERROR, createError); 
     var dbFile:File = File.applicationDirectory.resolvePath(database[0]); 
     Conn.open(dbFile); 
     if(database.length > 1) { 
      for(var i:Number = 1; i < database.length; i++) { 
       var DBname:String = database[i]; 
       Conn.attach(DBname.split("\.")[0], File.applicationDirectory.resolvePath(DBname)); 
      } 
     } 
     Conn.open(dbFile, SQLMode.CREATE, false, 1024, Key); 
    } 

    private function createError(event:SQLErrorEvent):void { 
     trace("Error code:", event.error.details); 
     trace("Details:", event.error.message); 
    } 

    public function Rs(sql:Array):Object { 
     var stmt:SQLStatement = new SQLStatement(); 
     Conn.begin(); 
     stmt.sqlConnection = Conn; 
     try { 
      for(var i:String in sql) {   
       stmt.text = sql[i]; 
       stmt.execute(); 
      } 
      Conn.commit(); 
     } catch(error:SQLErrorEvent) { 
      createError(error); 
      Conn.rollback(); 
     }; 
     var result:Object =stmt.getResult(); 
     return result; 
    } 
} 
संबंधित मुद्दे