Question

J'ai 2 bases de données SQLite, une téléchargée depuis un serveur (server.db), et un utilisé comme stockage sur le client (client.db).Je dois effectuer diverses requêtes de synchronisation sur la base de données client, en utilisant les données de la base de données du serveur.

Par exemple, je souhaite supprimer toutes les lignes du client.db tRole table et repeupler avec toutes les lignes du server.db tRole tableau.

Autre exemple, je souhaite supprimer toutes les lignes du client.db tFile table où le fileID n'est pas dans le server.db tFile tableau.

Dans SQL Server, vous pouvez simplement préfixer la table avec le nom de la base de données.Existe-t-il un moyen de le faire dans SQLite en utilisant Adobe Air ?

Était-ce utile?

La solution

Je viens de regarder l'API AIR SQL, et il y a un attach méthode sur SQLConnection cela ressemble exactement à ce dont vous avez besoin.

Je n'ai pas testé cela, mais d'après la documentation cela devrait fonctionner :

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();

Il peut y avoir des erreurs dans cet extrait de code, je n'ai pas beaucoup travaillé avec l'API AIR SQL ces derniers temps.Notez que les tables de la base de données ouvertes avec open sont disponibles en utilisant main.tableName, n'importe quelle base de données attachée peut recevoir n'importe quel nom (otherDb dans l'exemple ci-dessus).

Autres conseils

Il est possible d'ouvrir plusieurs bases de données à la fois dans SQLite, mais il est douteux que cela soit possible lorsque l'on travaille à partir de Flex/AIR.Dans le client de ligne de commande que vous exécutez ATTACH DATABASE path/to/other.db AS otherDb et ensuite vous pouvez faire référence aux tables de cette base de données comme otherDb.tableName tout comme dans MySQL ou SQL Server.

Les tables d'une base de données attachée peuvent être référencées à l'aide de la syntaxe nom-base-de-données.nom-table.

JOINDRE la documentation de la BASE DE DONNÉES sur sqlite.org

ce code peut fonctionner, il est écrit de moi :

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top