Χρησιμοποιώντας πολλαπλές βάσεις δεδομένων SQLite ταυτόχρονα

ψήφοι
7

Έχω 2 βάσεις δεδομένων SQLite, ένα κατεβάσει από έναν διακομιστή ( server.db), και που χρησιμοποιείται ως αποθήκη για τον πελάτη ( client.db). Πρέπει να εκτελέσετε διάφορες ερωτήσεις συγχρονισμού στη βάση δεδομένων του πελάτη, χρησιμοποιώντας δεδομένα από τη βάση δεδομένων του διακομιστή.

Για παράδειγμα, θέλω να διαγράψετε όλες τις σειρές στον client.db tRoleπίνακα, και συμπληρώσουν εκ νέου με όλες τις σειρές στον server.db tRoleπίνακα.

Ένα άλλο παράδειγμα, θέλω να διαγράψετε όλες τις σειρές στον client.db tFileπίνακα, όπου η fileIDδεν είναι στο server.db tFileτραπέζι.

Σε SQL Server, μπορείτε να πρόθεμα μόνο τον πίνακα με το όνομα της βάσης δεδομένων. Είναι ούτως ή άλλως εκεί για να το κάνετε αυτό σε SQLite χρησιμοποιώντας το Adobe Air;

Δημοσιεύθηκε 05/08/2008 στις 17:09
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
7

Απλά κοίταξε το AIR SQL API, και υπάρχει μια attachμέθοδος για SQLConnectionνα φαίνεται ακριβώς αυτό που χρειάζεστε.

Δεν το έχω δοκιμάσει αυτό, αλλά σύμφωνα με το έντυπο υλικό που θα πρέπει να εργαστεί:

var connection : SQLConnection = new SQLConnection();

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

var statement : SQLStatement = new SQLStatement();

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

Μπορεί να υπάρχουν λάθη στον κώδικα snipplet, δεν έχω δουλέψει πολύ με την AIR SQL API τον τελευταίο καιρό. Σημειώστε ότι οι πίνακες της βάσης δεδομένων άνοιξε με openτα διαθέσιμα χρήση main.tableName, οποιοδήποτε συνημμένο βάση δεδομένων μπορεί να δοθεί οποιοδήποτε όνομα σε όλα ( otherDbστο παραπάνω παράδειγμα).

Απαντήθηκε 13/08/2008 στις 17:16
πηγή χρήστη

ψήφοι
1

Είναι δυνατό να ανοίξουν πολλαπλές βάσεις δεδομένων ταυτόχρονα σε SQLite, αλλά είναι αμφίβολο αν μπορεί να γίνει όταν εργάζονται από Flex / AIR. Κατά τον πελάτη γραμμής εντολών τρέχετε ATTACH DATABASE path/to/other.db AS otherDbκαι, στη συνέχεια, μπορείτε να ανατρέξετε σε πίνακες στην εν λόγω βάση δεδομένων, όπως otherDb.tableNameακριβώς και στην MySQL ή SQL Server.

Πίνακες σε συνημμένη βάση δεδομένων μπορεί να αναφέρονται με τη σύνταξη της βάσης δεδομένων-name.table-όνομα.

ΕΠΙΣΥΝΑΨΕΤΕ τεκμηρίωση βάση δεδομένων sqlite.org

Απαντήθηκε 12/08/2008 στις 13:55
πηγή χρήστη

ψήφοι
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;
    }
}
Απαντήθηκε 15/12/2008 στις 17:46
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more