Aquí podría ser tu PUBLICIDAD


Usar múltiples bases de datos SQLite a la vez

votos
7

Tengo 2 bases de datos SQLite, una descargada desde un servidor ( server.db) y otra utilizada como almacenamiento en el cliente ( client.db). Necesito realizar varias consultas de sincronización en la base de datos del cliente, usando datos de la base de datos del servidor.

Por ejemplo, quiero eliminar todas las filas de la client.db tRoletabla y volver a llenar todas las filas de la server.db tRoletabla.

Otro ejemplo, quiero eliminar todas las filas en la client.db tFiletabla donde fileIDno está en la server.db tFiletabla.

En SQL Server puede simplemente ponerle un prefijo a la tabla con el nombre de la base de datos. ¿Hay alguna forma de hacerlo en SQLite usando Adobe Air?

Publicado el 05/08/2008 a las 17:09
fuente por usuario Shawn
En otros idiomas...        العربية       

3 respuestas

votos
7

Acabo de ver la API de AIR SQL, y hay un attachmétodo que SQLConnectionse ve exactamente lo que necesita.

No lo he probado, pero de acuerdo con la documentación debería funcionar:

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

Puede haber errores en ese snipplet de código, no he trabajado mucho con la API de AIR SQL últimamente. Observe que las tablas de la base de datos abierta con openestán disponibles usando main.tableName, cualquier base de datos adjunta puede recibir cualquier nombre ( otherDben el ejemplo anterior).

Respondida el 13/08/2008 a las 05:16
fuente por usuario Theo


Aquí podría ser tu PUBLICIDAD


votos
1

Es posible abrir varias bases de datos a la vez en Sqlite, pero es dudoso que se pueda hacer cuando se trabaja desde Flex / AIR. En el cliente de línea de comandos que ejecuta ATTACH DATABASE path/to/other.db AS otherDb, puede consultar las tablas en esa base de datos otherDb.tableNameigual que en MySQL o SQL Server.

Se puede hacer referencia a las tablas en una base de datos adjunta utilizando la sintaxis nombre-base de datos.nombre-tabla.

Adjunte documentación DATABASE en sqlite.org

Respondida el 12/08/2008 a las 01:55
fuente por usuario Theo

votos
0

este código puede ser un trabajo, es escribir sobre mí:

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;
    }
}
Respondida el 15/12/2008 a las 05:46
fuente por usuario morning