2008-08-05 6 views
7

У меня есть две базы данных SQLite, одна из которых загружается с сервера (server.db) и одна используется как хранилище на клиенте (client.db). Мне нужно выполнить различные запросы синхронизации в базе данных клиента, используя данные из базы данных сервера.Одновременно с использованием нескольких баз данных SQLite

Например, я хочу удалить все строки в таблице client.db tRole и повторно заполнить все строки в таблице server.db tRole.

Другой пример: я хочу удалить все строки в таблице client.db tFile, где fileID не находится в таблице server.db tFile.

В SQL Server вы можете просто префикс таблицы с именем базы данных. Есть ли все-таки сделать это в SQLite, используя Adobe Air?

+0

«Там не способ сделать это с уровня базы данных.» Как так? SQLite имеет ключевое слово `attach`, которое позволяет присоединить другую базу данных. И ответ Тео показывает, что Air, похоже, имеет соответствующий вызов API. Есть ли какое-то различие, которое я пропускаю, когда вы конкретно говорите «с уровня базы данных»? – spaaarky21 2014-05-09 19:32:28

ответ

7

Я только посмотрел на API AIR SQL, и есть более attach метод на SQLConnection это выглядит именно то, что вам нужно.

Я не проверял, но в соответствии с документацией, он должен работать:

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

Там могут быть ошибки в этом коде snipplet, я не работал много с API AIR SQL в последнее время. Обратите внимание, что таблицы базы данных, открытые с помощью open, доступны с использованием main.tableName, любая прикрепленная база данных может иметь любое имя вообще (otherDb в приведенном выше примере).

1

В Sqlite можно открыть сразу несколько баз данных, но вряд ли это можно сделать при работе с Flex/AIR. В клиенте командной строки вы запускаете ATTACH DATABASE path/to/other.db AS otherDb, а затем можете ссылаться на таблицы в этой базе данных как otherDb.tableName так же, как в MySQL или SQL Server.

Таблицы в прикрепленной базе данных можно называть с использованием синтаксиса database-name.table-name.

ATTACH DATABASE documentation at sqlite.org

0

этот код может быть работа, это написать мне:

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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^