Bruke flere SQLite databaser samtidig

stemmer
7

Jeg har 2 SQLite databaser, ett som er lastet ned fra en server ( server.db), og man brukte som lagringsplass på klienten ( client.db). Jeg trenger å utføre ulike synkroniseringsspørringer på klienten databasen ved hjelp av data fra serveren databasen.

For eksempel, jeg ønsker å slette alle rader i client.db tRoletabellen, og repopulate med alle radene i server.db tRoletabellen.

Et annet eksempel, jeg ønsker å slette alle rader i client.db tFiletabellen der fileIDer ikke i server.db tFiletabellen.

I SQL Server kan du bare prefiks bordet med navnet på databasen. Er det allikevel å gjøre dette i SQLite hjelp av Adobe Air?

Publisert på 05/08/2008 klokken 16:09
kilden bruker
På andre språk...                            


3 svar

stemmer
7

Jeg bare så på AIR SQL API, og det er en attachmetode på SQLConnectiondet ser akkurat det du trenger.

Jeg har ikke testet dette, men i henhold til dokumentasjon det skal fungere:

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

Det kan være feil i den koden snipplet, jeg har ikke jobbet mye med AIR SQL API siste. Legg merke til at tabellene til databasen åpnet med opener tilgjengelig ved hjelp main.tableName, kan en hvilken som helst tilknyttet database gis et navn i det hele tatt ( otherDbi eksempelet ovenfor).

Svarte 13/08/2008 kl. 16:16
kilden bruker

stemmer
1

Det er mulig å åpne flere databaser samtidig i SQLite, men det er tvilsomt om kan gjøres når du arbeider fra Flex / AIR. I kommandolinjen klienten kjøre deg ATTACH DATABASE path/to/other.db AS otherDb, og deretter kan du referere til tabeller i databasen så otherDb.tableNamelike i MySQL eller SQL Server.

Tabeller i en tilknyttet database kan bli henvist til ved hjelp av syntaksen database name.table-navn.

FEST DATABASE dokumentasjon på sqlite.org

Svarte 12/08/2008 kl. 12:55
kilden bruker

stemmer
0

Koden kan være arbeid, er det skrive av meg:

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;
    }
}
Svarte 15/12/2008 kl. 16:46
kilden bruker

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