Die Verwendung mehrerer SQLite-Datenbanken auf einmal

stimmen
7

Ich habe 2 SQLite - Datenbanken, die man von einem Server heruntergeladen ( server.db) und eine als Speicher auf dem Client verwendet ( client.db). Ich brauche verschiedene Sync - Abfragen auf der Client - Datenbank auszuführen, Daten vom Server - Datenbank.

Zum Beispiel möchte ich alle Zeilen in der löschen client.db tRoleTabelle und mit allen Zeilen in der repopulate server.db tRoleTabelle.

Ein weiteres Beispiel möchte ich alle Zeilen in der löschen client.db tFileTabelle , in der fileIDnicht mit der auf der server.db tFileTabelle.

In SQL Server können Sie das Präfix nur die Tabelle mit dem Namen der Datenbank. Gibt es trotzdem, dies in SQLite mit Adobe Air zu tun?

Veröffentlicht am 05/08/2008 um 17:09
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
7

Ich sah sie nur an der AIR - SQL - API, und es gibt eine attachMethode SQLConnectionsieht es genau das, was Sie brauchen.

Ich habe nicht getestet, sondern nach der Dokumentation sollte es funktionieren:

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

Es kann sein , Fehler in diesem Code snipplet, ich habe in letzter Zeit mit dem AIR - SQL - API nicht viel gearbeitet. Beachten Sie, dass die Tabellen der Datenbank geöffnet mit opensind verfügbar unter Verwendung main.tableNamekann jeder ordneten Datenbank einen beliebigen Namen (überhaupt gegeben werden , otherDbin dem obigen Beispiel).

Beantwortet am 13/08/2008 um 17:16
quelle vom benutzer

stimmen
1

Es ist möglich , mehrere Datenbanken auf einmal in SQLite zu öffnen, aber es ist zweifelhaft , ob getan werden kann , wenn sie von Flex / AIR arbeiten. In der Kommandozeilen - Client Sie laufen ATTACH DATABASE path/to/other.db AS otherDbund dann können Sie auf Tabellen in dieser Datenbank als verweisen otherDb.tableNameebenso wie in MySQL oder SQL Server.

Tabellen in einer angeschlossenen Datenbank können mit dem Syntax-Datenbank-name.table-namen bezeichnet werden.

ATTACH DATABASE Dokumentation bei sqlite.org

Beantwortet am 12/08/2008 um 13:55
quelle vom benutzer

stimmen
0

dieser Code Arbeit sein kann, ist es Schreiben von mir:

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;
    }
}
Beantwortet am 15/12/2008 um 17:46
quelle vom benutzer

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