Vă mulțumim pentru susținere

Utilizarea simultană a mai multor baze de date SQLite

Am două baze de date SQLite, unul descărcat de pe un server ( server.db ) și unul folosit ca spațiu de stocare pe client ( client.db ). Trebuie să efectuez diverse interogări de sincronizare pe baza de date a clientului, utilizând date din baza de date a serverului.

De exemplu, vreau să șterg toate rândurile din tabela client.db tRole și să repopulez cu toate rândurile din tabela server.db tRole .

Un alt exemplu, vreau să șterg toate rândurile din tabela client.db tFile unde fileID nu este în tabela server.db tFile .

În SQL Server puteți prefixa tabelul cu numele bazei de date. Exista oricum acest lucru in SQLite folosind Adobe Air?

0
adăugat editat
"Nu există modalitate de a face acest lucru de la nivelul bazei de date." Cum așa? SQLite are un cuvânt cheie attach care vă permite să atașați o altă bază de date. Și răspunsul lui Theo arată că Air pare să aibă un apel API corespunzător. Există o distincție pe care o pierd când spui în mod expres "de la nivelul bazei de date"?
adăugat autor spaaarky21

2 răspunsuri

Este posibil să deschideți simultan mai multe baze de date în Sqlite, dar este îndoielnic dacă se poate face atunci când lucrați de la Flex / AIR. În clientul liniei de comandă executați calea ATTACH DATABASE / to / other.db AS otherDb și apoi puteți să consultați tabelele din acea bază de date ca otherDb.tableName la fel ca în MySQL sau SQL Server.

Tabelele dintr-o bază de date atașată pot fi menționate folosind sintaxa bază de date-name.table-name.

     

Documentația ATTACH DATABASE la sqlite.org

0
adăugat

M-am uitat la API-ul AIR SQL, și există o metodă attach pe SQLConnection , arată exact ceea ce aveți nevoie.

Nu am testat acest lucru, dar conform documentației ar trebui să funcționeze:

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

S-ar putea să existe erori în snippletul de cod, în ultima vreme nu am lucrat prea mult cu AIR SQL API. Observați că tabelele bazei de date deschise cu open sunt disponibile folosind main.tableName , orice bază de date atașată poate primi orice nume ( otherDb în exemplul de mai sus).

0
adăugat