Usando vários bancos de dados SQLite ao mesmo tempo

votos
7

Eu tenho 2 bancos de dados SQLite, um baixado de um servidor ( server.db), e um usados como armazenamento no cliente ( client.db). Eu preciso para executar várias consultas de sincronização no banco de dados do cliente, usando dados do banco de dados do servidor.

Por exemplo, eu quero excluir todas as linhas na client.db tRoletabela e repovoar com todas as linhas na server.db tRoletabela.

Outro exemplo, eu quero excluir todas as linhas na client.db tFiletabela onde o fileIDnão está na server.db tFilemesa.

Em SQL Server você pode simplesmente prefixar a tabela com o nome do banco de dados. Existe uma maneira de fazer isso no SQLite usando o Adobe Air?

Publicado 05/08/2008 em 17:09
fonte usuário
Em outras línguas...                            


3 respostas

votos
7

Eu olhei para a API AIR SQL, e não há um attachmétodo em SQLConnectionque parece exatamente o que você precisa.

Eu não testei isso, mas de acordo com a documentação que deve 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();

Pode haver erros em que snipplet código, eu não trabalhei muito com a API AIR SQL recentemente. Note-se que as tabelas da base de dados aberta com openestão disponíveis usando main.tableName, uma base de dados ligada pode ser dada qualquer nome de todo ( otherDbno exemplo acima).

Respondeu 13/08/2008 em 17:16
fonte usuário

votos
1

É possível abrir vários bancos de dados ao mesmo tempo em SQLite, mas é duvidoso que pode ser feito quando o trabalho de Flex / AIR. No cliente de linha de comando é executado ATTACH DATABASE path/to/other.db AS otherDbe, em seguida, você pode consultar tabelas no banco de dados como otherDb.tableNamecomo em MySQL ou SQL Server.

Tabelas de um banco de dados ligado pode ser referidas usando a base de dados da tabela.nome-nome sintaxe.

Anexar documentação DATABASE em sqlite.org

Respondeu 12/08/2008 em 13:55
fonte usuário

votos
0

Este código pode ser trabalho, é escrita de mim:

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;
    }
}
Respondeu 15/12/2008 em 17:46
fonte usuário

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