L'utilisation de plusieurs bases de données SQLite à la fois

voix
7

J'ai 2 bases de données SQLite, un téléchargée sur 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 veux supprimer toutes les lignes de la client.db tRoletable, et repeupler avec toutes les lignes de la server.db tRoletable.

Un autre exemple, je veux supprimer toutes les lignes de la client.db tFiletable où l' fileIDest pas dans le server.db tFiletableau.

Dans SQL Server, vous pouvez simplement le préfixe de la table avec le nom de la base de données. Y at-il de toute façon de le faire dans SQLite avec Adobe Air?

Créé 05/08/2008 à 17:09
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
7

Je viens de regarder l'API AIR SQL, et il y a une attachméthode sur SQLConnectionelle ressemble exactement ce dont vous avez besoin.

Je ne l'ai pas testé, mais d'après la documentation, il 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 IGNORE  INTO main.myTable SELECT * FROM otherDb.myTable";
statement.execute();

Il peut y avoir des erreurs dans ce code snipplet, je n'ai pas beaucoup travaillé avec l'API SQL AIR ces derniers temps. Notez que les tables de la base de données ouvertes avec opensont disponibles à l' aide main.tableName, une base de données jointe peut être donné un nom à tous ( otherDbdans l'exemple ci - dessus).

Créé 13/08/2008 à 17:16
source utilisateur

voix
1

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

Les tableaux dans une base de données ci-joint peuvent être appelés à utiliser la syntaxe base de données nom-.

FIXER documentation DATABASE à sqlite.org

Créé 12/08/2008 à 13:55
source utilisateur

voix
0

ce code peut être un travail, il est d'écrire 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;
    }
}
Créé 15/12/2008 à 17:46
source utilisateur

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